我正在使用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知道应该在何时触发哪个问题。

最佳答案

我认为这是控制上的错误,或者是出于某些非显而易见的原因而实现的。实际上,此控件不支持页面上的多个实例。考虑使用AsyncFileUpload control代替或自定义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方法,您将很容易意识到这种控件的这种行为(第一个控件句柄从页面上的所有同级控件上载)。

10-07 23:55