更新面板和回发触发器 asp 内的输入文件

本文关键字:asp 输入 文件 触发器 更新 | 更新日期: 2023-09-27 18:31:21

我在UpdatePanel中使用了一个输入文件,它运行良好。 但是使用UpdatePanel PostBackTrigger,ScriptManager.RegisterStartupScript不起作用。

如果我不使用PostBackTrigger,ScriptManager.RegisterStartupScript可以工作,但输入文件不能。

我正在使用带有 C# 的 ASP Web 窗体

这是源代码。

。.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadFile.aspx.cs" Inherits="WebApplication1.UploadFile" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="up_upload" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:PostBackTrigger ControlID="btn_upload" />
        </Triggers>
        <ContentTemplate>
            <input type="file" id="file_test" runat="server" />
            <asp:Button ID="btn_upload" runat="server" Text="Subir" CausesValidation="False" OnClick="btn_upload_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

。.cs

protected void btn_upload_Click(object sender, EventArgs e)
{
    try
    {
        string message = "file not uploaded!";
        if (file_test.PostedFile != null)
        {
            string fn = file_test.PostedFile.FileName;
            string only_path = Server.MapPath(".");
            file_test.PostedFile.SaveAs(only_path + "//Images//" + fn);
            ScriptManager.RegisterStartupScript(up_upload, up_upload.GetType(), Guid.NewGuid().ToString(), "alert('server path: ' + '" + only_path.Replace("''", "''''") + "');", true);
            message = "file uploaded!";
        }
        ScriptManager.RegisterStartupScript(up_upload, up_upload.GetType(), Guid.NewGuid().ToString(), "alert('" + message + "');", true);
        up_upload.Update();
    }
    catch (Exception ex)
    {
        ScriptManager.RegisterStartupScript(up_upload, up_upload.GetType(), Guid.NewGuid().ToString(), "alert('" + ex.Message + "');", true);
    }
}

更新面板和回发触发器 asp 内的输入文件

解决了!当我进行整页回发时,我使用了 ClientScript.RegisterStartupScript 而不是 ScriptManager.RegisterstartupScript。

ClientScript.RegisterStartupScript(up_upload.GetType(), 
Guid.NewGuid().ToString(), "<script>alert('" + message + "');</script>");

感谢您的帮助!

asp.net> 使用文件上载程序控件的文件上载始终需要整页回发请求。

这是所有 AJAX 框架中用于异步调用应用程序的 XmlHttpRequest 组件的限制。我建议你两个解决方案:

  1. 给出整页回发(**即不要在更新面板中使用文件上传)
  2. 如果您想要完整的回发,请尝试其他解决方案,例如用于上传文件的 Dropzone 文件上传器插件。当我想要一个很酷的文件上传界面时,我总是使用它。这是 非常容易使用 .请参阅其文档以供使用,或尝试此链接进行了解。

相信我,这很容易。