我正在使用 ajaxFileUpload,如下所述:http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/AjaxFileUpload/AjaxFileUpload.aspx
它工作正常,除非我在同一页面上有多个文件上传控件。具体来说,我正在尝试针对不同的问题上传不同的文件。当我在页面上上传第一个时,它工作正常,但页面下方的那个只会将其文件上传到第一个问题的答案中。
我不确定这是否有意义......所以它可能会帮助您知道我的页面是使用 ascx 文件动态填充问题的。文档 ascx 文件如下所示:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Document.ascx.cs" Inherits="ScholarshipApplication.controls.questions.Document" %>
<ajaxToolkit:AjaxFileUpload OnUploadComplete="UploadComplete" ID="FileUploadControl" MaximumNumberOfFiles="1" runat="server" AllowedFileTypes="png,jpg,jpeg,pdf,tiff,tif,gif" />
<asp:LinkButton ID="downloadButton" runat="server" CausesValidation="false" OnClick="downloadButton_Click" />
以及背后的代码:
public void UploadComplete(object sender, AjaxFileUploadEventArgs e)
{
entry.data = e.FileName;
entry.setDocumentData(e.GetContents());
this.downloadButton.Text = e.FileName;
}
我最初的想法是,我需要以某种方式帮助控件生成的 JavaScript 来知道它应该何时触发哪个问题。
我相信这是控制中的错误,或者是由于某些不明显的原因而实现的。实际上,该控件不支持页面上的多个实例。考虑使用异步文件上传控件相反或自定义一些源AjaxFileUpload
控制。如果您更喜欢第二种选择,那么您需要从这里下载源:http://ajaxcontroltoolkit.codeplex.com/SourceControl/BrowseLatest并更改 AjaxFileUpload.cs 文件(这里是路径:/Server/AjaxControlToolkit/AjaxFileUpload/AjaxFileUpload.cs
)。你需要做的就是改变ContextKey
用于将上下文键 guid 与控件的唯一 id 相结合的属性常量:
public class AjaxFileUpload : ScriptControlBase
{
private const string ContextKeySuffix = "{DA8BEDC8-B952-4d5d-8CC2-59FE922E2923}";
private string ContextKey
{
get { return this.UniqueID + "_" + ContextKeySuffix; }
}
其实如果你愿意看的话PreRender
的方法AjaxFileUpload
类,您将很容易意识到该控件的此类行为的原因(第一个控件处理页面上所有同级控件的上传)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)