C# 在不使用UpdatePanel的情况下单击RadioButtonList时,如何停止页面重新加载?

C# 在不使用UpdatePanel的情况下单击RadioButtonList时,如何停止页面重新加载?,c#,asp.net,visual-studio-2015,updatepanel,radiobuttonlist,C#,Asp.net,Visual Studio 2015,Updatepanel,Radiobuttonlist,我在我的网页中使用RadioButtonList,其中RadioButtonList项目为a和B。单击项目B时,我显示了几个带有FileUploadControl的图像框,并将它们添加到数据库中。当我单击单选按钮值时,我的页面将刷新。我曾经尝试过使用UpdatePanel,但是在没有页面刷新的情况下效果很好,但是我无法将这些值添加到数据库中。我有一个空异常,文件名在从FileUploadControl中选择图像后变为空 我已经对此进行了搜索,如果在UpdatePanel中添加FileUpload

我在我的网页中使用RadioButtonList,其中RadioButtonList项目为a和B。单击项目B时,我显示了几个带有FileUploadControl的图像框,并将它们添加到数据库中。当我单击单选按钮值时,我的页面将刷新。我曾经尝试过使用UpdatePanel,但是在没有页面刷新的情况下效果很好,但是我无法将这些值添加到数据库中。我有一个空异常,文件名在从FileUploadControl中选择图像后变为空

我已经对此进行了搜索,如果在UpdatePanel中添加FileUploadControl,则所选文件将丢失

下面给出的代码段是我如何获得图像名称的

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" />
                            &nbsp;

                        </div>
                        <div id="imageB">
                            <b>B.</b>
                            <asp:Image ID="Image2" CssClass="images" runat="server" ImageUrl="..\Folder\blankImage.png" Width="150px" />
                            &nbsp;

                        </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>


A.

B

A. B






在上述给定的代码段中,当用户在RadioButton列表中选择项目A时,当用户单击项目BimageAnswersfileUpload时,文本答案(Div标签)将被隐藏。单击这些按钮时,RadioButton列表页面中的项目将刷新,并将值添加到数据库中。但是我需要停止页面重新加载,同时将值添加到数据库中。当我使用更新面板时,我得到的文件名变为null,并且在我的代码中得到一个null异常

上传文件时,更新面板基本上需要进行完全回发。为此,您需要在更新面板中发布反向触发器

 <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>


另外,请确保您有以下信息:Form.Enctype=“多部分/表单数据”;在代码中设置,也可以在该页面中设置


或者,您需要使用Jquery/Javascript来实现RadiobuttonList click事件。

这听起来可能不太好,但如果单击单选按钮进行回发,您可以将AutoPostBack=“false”使用jquery在客户端捕获onchange事件,并显示那些ImageBox和fileupload控件,这样就不需要使用updatepanel,一切都会正常工作

我建议您不要使用更新面板,而是在jquery中使用ajax进行部分更新(异步通信)

在这里,您可以找到如何使用jQuery上传文件

在这里,您可以找到如何在单击单选按钮时切换(显示/隐藏)控件。


希望这能对您有所帮助。

请告诉我它是否有效,或者您是否面临任何问题。谢谢您的回答。我试过了。没用。你能解释一下使用Post back trigger的原因吗?使用Post back trigger可以为页面返回完整的帖子,而不是从更新面板返回部分帖子。我的答案有了细微的更改。我在PostBackTrigger中添加了文件上载控件的ID,请尝试我认为它应该可以工作。我收到了此错误。通过RegisterAsyncPostBackControl或RegisterPostBackControl注册ID为“FileUpload1”的控件必须实现InAdminContainer、IPostBackDataHandler或IPostBackEventHandler。您好。谢谢你的回答。它不工作,这就是为什么我使用更新面板。谢谢你的回答。我会检查并让您知道:)