Ajax AsyncFileUpload触发服务器代码,但不更新客户端网页
本文关键字:更新 客户端 网页 代码 AsyncFileUpload 服务器 Ajax | 更新日期: 2023-09-27 18:10:20
我在更新面板中有一个asyncfileupload控件。文件成功上传并触发了正确的服务器端代码。服务器上的代码与预期的一样,但是,服务器代码中的一行更改了标签上的文本。我在调试模式下遍历代码,行被执行,但没有对页面进行任何更改。
下面是一些代码:
<asp:UpdatePanel runat="server" ID="updater" >
<ContentTemplate>
<asp:AsyncFileUpload ID="fileUpload" runat="server" OnUploadedComplete="FileUploadComplete" />
<asp:Label ID="AsyncText" runat="server" Text="File Type not checked" />
</ContentTemplate>
</asp:UpdatePanel>
public void FileUploadComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
System.Threading.Thread.Sleep(500);
if(fileUpload.HasFile) { AsyncText.Text = "file of correct format: "; }
}
谁能帮我解决这个问题或提供另一个解决方案?谢谢
我认为你必须采取不同的解决方案。从您的标签消息中,看起来您正在尝试检查文件类型,对吗?基本上,AsyncUplaod控件虽然返回以将上传的文件发送到浏览器,但实际上并没有更新页面的视图状态,因此标签永远不会更新。嘘!我可以在页面加载事件中使用下面的代码来可视化这一点。
if (Page.IsPostBack)
{
if (Request.Files.Count > 0)
{
AsyncText.Text = "file of correct format";
ListItem item = new ListItem("item to add");
lb.Items.Add(item);
}
}
这允许我设置标签文本,但仍然没有改变,直到我点击一个随机的按钮,我添加到页面。这个按钮后面的代码中甚至没有事件,但它足以引起正常的回发,并且标签文本和列表项被成功地更新/添加到列表中。也就是说,我会等到用户使用单独的上传按钮单击上传后再更新标签。(即使用AsyFileUplaod将其发送到浏览器,但使用另一个按钮将文件保存到服务器)。您总是可以在按钮单击事件中通过引用张贴的文件到网页来执行文件评估,就像我在上面的代码中所做的那样。
我在网上发现的其他一些例子是使用javascript来改变标签文本,这也很好。像这样:
string message = "";
if (e.StatusMessage == "Success")
{
message = "File upload successful;";
}
else
{
message = "File did not upload successfully;";
}
ClientScript.RegisterStartupScript(this.GetType(), "akey", "document.getElementByID('label').value =" + message, true);
另一个例子:here
我认为在这种情况下,这只是控制的本质,实现你想要的唯一方法是通过一些创造性的思维。如果你对我在这里列出的任何事情有任何其他问题,请随时提问。
祝你好运!
标签位于更新面板的内部还是外部?似乎部分页面更新可能不包括对标签文本的更新。我会说移动标签作为最简单的建议,但你也可以尝试像RegisterStartupScript这样的东西,它将通过javascript改变标签文本。这仍然可以让服务器端根据上传过程中发生的情况来控制显示哪些文本。
如果你能发布一些代码,那就太好了。