C# Asp.NET Updatepanel未按预期工作

C# Asp.NET Updatepanel未按预期工作,c#,html,asp.net,file-upload,updatepanel,C#,Html,Asp.net,File Upload,Updatepanel,这是我的想法。。 我正在通过文件上载控件上载图像。。但是当我给updatepanel设置触发器时,Fileupload控件显示它是空的。。我不知道为什么 这是我需要的 我只需要在单击“上载”按钮时更新updatepanel,否则我不想更新其内容。。我需要在编码中做哪些更改 这是aspx代码 <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"

这是我的想法。。 我正在通过文件上载控件上载图像。。但是当我给updatepanel设置触发器时,Fileupload控件显示它是空的。。我不知道为什么

这是我需要的

我只需要在单击“上载”按钮时更新updatepanel,否则我不想更新其内容。。我需要在编码中做哪些更改

这是aspx代码

 <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"/>
    <div>


            <fieldset style="width:50%; margin-left:300px">
            <legend>Upload Files</legend>
                <asp:FileUpload runat="server" ID="UploadImages" style="background-color:white; position:relative; font-family:'Palatino Linotype'; font-size:medium" Width="500px" AllowMultiple="true"/>
                <asp:Button runat="server" ID="uploadedFile" style="position:relative;  font-family:'Palatino Linotype'; font-size:medium; width: 112px; height: 29px;" Text="Upload" OnClick="uploadFile_Click" />
            </fieldset>


    <div id="back" runat="server" class="transbox" style="width:100%;height:100%;left:0px;top:0px;position:absolute" Visible="false">
     <asp:UpdatePanel ID="updtpanel" runat="server" UpdateMode="Conditional" style="width:100%;height:100%;left:0px;top:0px;position:absolute">
           <ContentTemplate>
                <asp:Button ID="btnsave" runat="server" UseSubmitBehavior="true" Text="Find Images" OnClick="btnsave_Click" Font-Bold="true" style="position:absolute" BackColor="Yellow"></asp:Button>--%>
           </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="uploadedFile" EventName="Click"/>
            </Triggers>
        </asp:UpdatePanel>

    </div>

    </div>
    </form>
如果我对updatepanel uploadFile.HasImages中的触发器进行注释,它们将起作用。。但如果我取消注释它将直接登陆请先选择一个文件错误消息。。我在代码中犯了什么错误。

您的updatepanel在单击UploadFile控件后立即触发回发,因此发生的情况是,所选文件会在第一次请求时立即回发。当您通过单击按钮提交第二个请求时,UploadFile控件再次为空。UploadFile控件或任何input:file元素在回发后都不会保留所选的值。你看到的是设计的

最简单的方法是避免最初的回发,完全在客户端进行验证。换句话说,从updatepanel中删除触发器部分,因为您已经发现这是可行的。显然,当单击upload files按钮时,您仍然会在服务器端进行验证

除此之外,还有其他替代方法,但底线是,您无法执行完全回发。当页面中有UploadFile控件时,Updapanel会在后台执行此操作,因为这将导致提交选定的文件。为了证明我所说的,请在Page_Load上设置一个断点,并在updatepanel触发更新时为Request.Files添加一个watch。

您的updatepanel在单击UploadFile控件后立即触发回发,因此所选的文件会在第一次请求后立即回发。当您通过单击按钮提交第二个请求时,UploadFile控件再次为空。UploadFile控件或任何input:file元素在回发后都不会保留所选的值。你看到的是设计的

最简单的方法是避免最初的回发,完全在客户端进行验证。换句话说,从updatepanel中删除触发器部分,因为您已经发现这是可行的。显然,当单击upload files按钮时,您仍然会在服务器端进行验证


除此之外,还有其他替代方法,但底线是,您无法执行完全回发。当页面中有UploadFile控件时,Updapanel会在后台执行此操作,因为这将导致提交选定的文件。为了证明我所说的,在页面加载上设置一个断点,并在updatepanel触发更新时向Request.Files添加一个watch。

@Icarus。。但据我所知,触发器只允许对我的目标updatepanel进行更新,对吗?如果我希望我的updatepanel只更新一次,我需要使用什么方法。@Kaushik updatepanel将只更新其内容,但会执行完整的回发。如果您在页面加载上放置一个断点并查看发生了什么,您可以很容易地看到这一点。确保在请求中添加手表。Files@Icarus.. 谢谢你。。那真的启发了我。。我们将根据您提供的知识解决我的问题。。。谢谢@伊卡洛斯。。但据我所知,触发器只允许对我的目标updatepanel进行更新,对吗?如果我希望我的updatepanel只更新一次,我需要使用什么方法。@Kaushik updatepanel将只更新其内容,但会执行完整的回发。如果您在页面加载上放置一个断点并查看发生了什么,您可以很容易地看到这一点。确保在请求中添加手表。Files@Icarus.. 谢谢你。。那真的启发了我。。我们将根据您提供的知识解决我的问题。。。谢谢
protected void uploadFile_Click(object sender, EventArgs e)
    {

        if (UploadImages.HasFiles)
        {

            string fileExt = Path.GetExtension(UploadImages.FileName).ToLower();
            if (fileExt == ".jpeg" || fileExt == ".png" || fileExt == ".jpg" || fileExt == ".bmp")
            {
                foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles)
                {
                    count1 += 1;
                }

                foreach(HttpPostedFile uploadedFile in UploadImages.PostedFiles)
                {
                    count += 1;

                    filepath = Server.MapPath("~/Images/" + uploadedFile.FileName);
                    uploadedFile.SaveAs(filepath);
                    newpath = "../Images/" + uploadedFile.FileName;
                    try
                    {
                        createImgPanel();
                        Image nimg = Page.FindControl("img" + count) as Image;
                        nimg.ImageUrl = newpath.ToString();

                        Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Files Uploaded!!');", true);

                    }

                    catch (Exception ex)
                    {
                        Response.Write(ex.Message);
                    }

                }
            }
            else

            {
                Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select only Image Files!!');", true);
            }

        }
        else
        {
            Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select a File First!!');", true);
        }
    }