如何在不使用 UpdatePanel 的情况下单击 RadioButtonList 时停止页面重新加载?
How to stop page reload when RadioButtonList clicked without using UpdatePanel?
我在我的网页中使用 RadioButtonList,其中 RadioButtonList 项目是 A 和 B。当单击项目 B 时,我显示了几个带有 FileUploadControl 的 ImageBox 并将它们添加到数据库中。当我单击单选按钮值时,我的页面得到刷新。我试过使用 UpdatePanel,然后它在没有页面刷新的情况下工作正常,但我无法将值添加到数据库中。我有一个 null 异常,即使从 FileUploadControl
选择图像后 FileName 变为空
我对此进行了搜索,found 如果将 FileUploadControl 添加到 UpdatePanel 中,所选文件将会丢失。
下面给定的代码段是我如何获取图像名称的
string imageFile = Path.GetFileName(FileUpload1.PostedFile.FileName);
还有其他方法可以同时实现吗? (将它们添加到数据库并单击而不刷新页面)
使用完整代码编辑:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="RadioButtonList1" EventName="SelectedIndexChanged" />
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
<ContentTemplate>
<div class="textAnswers" id="textAns" runat="server">
<p>
<b>A.</b>
<asp:TextBox ID="answerOneTb" runat="server" Width="95%"></asp:TextBox>
</p>
<p>
<b>B.</b>
<asp:TextBox ID="answerTwoTb" runat="server" Width="95%"></asp:TextBox>
</p>
</div>
<div class="imageAnswers" id="imageAns" runat="server">
<div id="imageA">
<b>A.</b>
<asp:Image ID="Image1" CssClass="images" runat="server" ImageUrl="..\Folder\blankImage.png" Width="150px" />
</div>
<div id="imageB">
<b>B.</b>
<asp:Image ID="Image2" CssClass="images" runat="server" ImageUrl="..\Folder\blankImage.png" Width="150px" />
</div>
<br />
<br />
<br />
</div>
<div class="fileUpload" id="addImageFupld" runat="server">
<div id="fu1">
<asp:FileUpload ID="FileUpload1" runat="server" Width="150px" onchange="ImagePreviewA(this)" accept=".png,.jpg,.jpeg" /><br />
<br />
<dx:ASPxLabel ID="imageName1" runat="server" Text="ASPxLabel" Visible="false"></dx:ASPxLabel>
</div>
<div id="fu2">
<asp:FileUpload ID="FileUpload2" runat="server" Width="150px" onchange="ImagePreviewB(this)" accept=".png,.jpg,.jpeg" /><br />
<dx:ASPxLabel ID="imageName2" runat="server" Text="ASPxLabel" Visible="false"></dx:ASPxLabel>
</div>
</div>
<asp:Button ID="Button1" runat="server" Text="Add Question" OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
在上面给定的代码段中 textAnswers(Div 标签)将在用户选择 RadioButtonList 中的项目 A 和单击项目 B 时隐藏 imageAnswers 和 fileUpload 将可见。当点击这些到 RadioButtonList 页面中的项目时,会刷新并将值添加到数据库中。但是我需要停止页面重新加载并同时将值添加到数据库中。当我使用更新面板时,我得到 FileName 变为 null 并在我的代码隐藏中得到一个 null 异常。
基本上,当您上传文件时,您的更新面板需要进行完整的回发。为此,您需要 Post 在更新面板中返回触发器。
<asp:UpdatePanel ID="updPanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="RadioButtonList1" EventName="SelectedIndexChanged" />
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
<ContentTemplate>
<asp:FileUpload ID="fupload" runat="server" /><br />
<asp:Button ID="btnUpload" runat="server" Text="Upload" />
<asp:RadioButtonList ID="RadioButtonList1" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="T1" Value="M1"></asp:ListItem>
<asp:ListItem Text="T2" Value="M2"></asp:ListItem>
</asp:RadioButtonList>
</ContentTemplate>
</asp:UpdatePanel>
还要确保你有 this.Form.Enctype = "multipart/form-data";在您的代码中设置,或者您可以放入该页面。
或者你需要使用Jquery/Javascript来实现RadiobuttonList点击事件。
这听起来可能不太好,但是如果单击单选按钮进行回发,您可以打开 AutoPostBack="false" 并使用 jquery 在客户端捕获该 onchange 事件并显示那些图像框和文件上传控件然后你不需要使用 updatepanel,一切都会正常工作。
我建议您不要使用更新面板,而是使用 jquery 中的 ajax 进行部分更新(异步通信。)
在这里您可以找到如何使用 jQuery 上传文件
How to upload file using javascript?
在这里您可以找到如何在单击单选按钮时切换(显示/隐藏)控件。
Show hide controls on radio button click.
希望这对您有所帮助。
我在我的网页中使用 RadioButtonList,其中 RadioButtonList 项目是 A 和 B。当单击项目 B 时,我显示了几个带有 FileUploadControl 的 ImageBox 并将它们添加到数据库中。当我单击单选按钮值时,我的页面得到刷新。我试过使用 UpdatePanel,然后它在没有页面刷新的情况下工作正常,但我无法将值添加到数据库中。我有一个 null 异常,即使从 FileUploadControl
选择图像后 FileName 变为空我对此进行了搜索,found 如果将 FileUploadControl 添加到 UpdatePanel 中,所选文件将会丢失。
下面给定的代码段是我如何获取图像名称的
string imageFile = Path.GetFileName(FileUpload1.PostedFile.FileName);
还有其他方法可以同时实现吗? (将它们添加到数据库并单击而不刷新页面)
使用完整代码编辑:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="RadioButtonList1" EventName="SelectedIndexChanged" />
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
<ContentTemplate>
<div class="textAnswers" id="textAns" runat="server">
<p>
<b>A.</b>
<asp:TextBox ID="answerOneTb" runat="server" Width="95%"></asp:TextBox>
</p>
<p>
<b>B.</b>
<asp:TextBox ID="answerTwoTb" runat="server" Width="95%"></asp:TextBox>
</p>
</div>
<div class="imageAnswers" id="imageAns" runat="server">
<div id="imageA">
<b>A.</b>
<asp:Image ID="Image1" CssClass="images" runat="server" ImageUrl="..\Folder\blankImage.png" Width="150px" />
</div>
<div id="imageB">
<b>B.</b>
<asp:Image ID="Image2" CssClass="images" runat="server" ImageUrl="..\Folder\blankImage.png" Width="150px" />
</div>
<br />
<br />
<br />
</div>
<div class="fileUpload" id="addImageFupld" runat="server">
<div id="fu1">
<asp:FileUpload ID="FileUpload1" runat="server" Width="150px" onchange="ImagePreviewA(this)" accept=".png,.jpg,.jpeg" /><br />
<br />
<dx:ASPxLabel ID="imageName1" runat="server" Text="ASPxLabel" Visible="false"></dx:ASPxLabel>
</div>
<div id="fu2">
<asp:FileUpload ID="FileUpload2" runat="server" Width="150px" onchange="ImagePreviewB(this)" accept=".png,.jpg,.jpeg" /><br />
<dx:ASPxLabel ID="imageName2" runat="server" Text="ASPxLabel" Visible="false"></dx:ASPxLabel>
</div>
</div>
<asp:Button ID="Button1" runat="server" Text="Add Question" OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
在上面给定的代码段中 textAnswers(Div 标签)将在用户选择 RadioButtonList 中的项目 A 和单击项目 B 时隐藏 imageAnswers 和 fileUpload 将可见。当点击这些到 RadioButtonList 页面中的项目时,会刷新并将值添加到数据库中。但是我需要停止页面重新加载并同时将值添加到数据库中。当我使用更新面板时,我得到 FileName 变为 null 并在我的代码隐藏中得到一个 null 异常。
基本上,当您上传文件时,您的更新面板需要进行完整的回发。为此,您需要 Post 在更新面板中返回触发器。
<asp:UpdatePanel ID="updPanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="RadioButtonList1" EventName="SelectedIndexChanged" />
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
<ContentTemplate>
<asp:FileUpload ID="fupload" runat="server" /><br />
<asp:Button ID="btnUpload" runat="server" Text="Upload" />
<asp:RadioButtonList ID="RadioButtonList1" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="T1" Value="M1"></asp:ListItem>
<asp:ListItem Text="T2" Value="M2"></asp:ListItem>
</asp:RadioButtonList>
</ContentTemplate>
</asp:UpdatePanel>
还要确保你有 this.Form.Enctype = "multipart/form-data";在您的代码中设置,或者您可以放入该页面。
或者你需要使用Jquery/Javascript来实现RadiobuttonList点击事件。
这听起来可能不太好,但是如果单击单选按钮进行回发,您可以打开 AutoPostBack="false" 并使用 jquery 在客户端捕获该 onchange 事件并显示那些图像框和文件上传控件然后你不需要使用 updatepanel,一切都会正常工作。
我建议您不要使用更新面板,而是使用 jquery 中的 ajax 进行部分更新(异步通信。)
在这里您可以找到如何使用 jQuery 上传文件 How to upload file using javascript?
在这里您可以找到如何在单击单选按钮时切换(显示/隐藏)控件。 Show hide controls on radio button click.
希望这对您有所帮助。