C# Asp.NET Updatepanel未按预期工作
这是我的想法。。 我正在通过文件上载控件上载图像。。但是当我给updatepanel设置触发器时,Fileupload控件显示它是空的。。我不知道为什么 这是我需要的 我只需要在单击“上载”按钮时更新updatepanel,否则我不想更新其内容。。我需要在编码中做哪些更改 这是aspx代码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"
<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);
}
}