如何在 ASP.NET 上的 ajax FileUpload 事件后执行客户端代码?

问题描述 投票:0回答:1

我有一个 ASP.NET Webforms 应用程序,我使用

ajaxFileUpload
上传一些文件以通过电子邮件发送。鉴于我的业务逻辑,我希望每封电子邮件最多允许 5 个文件,并且如果达到限制,我希望禁用文件选择器。我知道
ajaxFileUpload
确实在上传开始、完成和完成时有客户端和服务器端事件,但由于文件在选择之间临时存储,我想在
OnUploadComplete
事件内禁用客户端上的选择器(在服务器端)如果上传的文件达到5个。

我尝试过使用

ClientScript.RegisterStartupScript(this.GetType(), "files", "$("#ajaxCargarAdjunto_SelectFileContainer")[0].style.display = "none"", false);

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "key", "$("#ajaxCargarAdjunto_SelectFileContainer")[0].style.display = "none"", false);

但它不会触发脚本。即使将

UpdatePanel
及其类型传递给方法,但什么也没有。

我还尝试使用隐藏字段并调用

LoadPostData()
,但我得到了
Invalid postback or callback argument
异常。

IPostBackDataHandler textoAdjuntosCorreo = txtAdjuntosCorreo IPostBackDataHandler;
textoAdjuntosCorreo.LoadPostData(txtAdjuntosCorreo.UniqueID, Request.Params);

ajaxFileUpload
活动是

protected void ajaxCargarAdjunto_UploadComplete(object sender, AjaxFileUploadEventArgs e)
{
    ClientScript.RegisterStartupScript(this.GetType(), "files", "$("#ajaxCargarAdjunto_SelectFileContainer")[0].style.display = "none"", false);
}
c# asp.net webforms jsajaxfileuploader
1个回答
0
投票

您不能在 AjaxfileUpload 的 3 个服务器端事件中注入脚本,原因是这 3 个事件没有回发,也没有将网页返回到客户端。要使用脚本注册,网页必须返回到服务器。页面+后台代码运行,包括任何脚本注入,然后整个页面返回到客户端。

但是,由于 AjaxFileUpLoad 不会回发,因此您在 3 个服务器端事件中注意到,您可以触摸、查看、更改网页中的任何控件,这些控件当然仍然位于客户端。

因此,这 3 个服务器端事件必须像 Web 方法一样对待,因此它们不能使用客户端的网页,当然包括页面上的控件,或尝试注册脚本。如果没有页面回发,您当然无法注册脚本。

但是,为什么不考虑设置 MaxAllowedFiles 呢?

例如这个:

<ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" runat="server" 
    OnUploadComplete="AjaxFileUpload1_UploadComplete" 
        ChunkSize="8192" MaxFileSize="-1"
    MaximumNumberOfFiles="5"
    />

这样,用户最多只能选择 5 个文件。

例如这个:

© www.soinside.com 2019 - 2024. All rights reserved.