C# ajaxfileupload页面上的多个输入
我正在使用ajaxFileUpload,如下所述: 除了在同一页面上有多个文件上载控件外,它工作正常。具体来说,我尝试上传不同问题的不同文件。当我上传页面上的第一个问题时,效果很好,但页面下方的那个问题只会将其文件上传到第一个问题的答案中 我不确定这是否有意义。。。因此,它可能会帮助您了解我的页面是使用ascx文件动态填充问题的。文档ascx文件如下所示:C# ajaxfileupload页面上的多个输入,c#,ajaxcontroltoolkit,C#,Ajaxcontroltoolkit,我正在使用ajaxFileUpload,如下所述: 除了在同一页面上有多个文件上载控件外,它工作正常。具体来说,我尝试上传不同问题的不同文件。当我上传页面上的第一个问题时,效果很好,但页面下方的那个问题只会将其文件上传到第一个问题的答案中 我不确定这是否有意义。。。因此,它可能会帮助您了解我的页面是使用ascx文件动态填充问题的。文档ascx文件如下所示: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Docume
<%@ 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" />
我最初的想法是,不知何故,我需要帮助控件生成的javascript知道它应该在何时触发哪个问题。根据我的理解,您需要一个隐藏字段变量来标识UserControl中的问题id:
<input type="hidden" id="hdnQuestionId" runat="server"/>
在填充/生成问题时,您需要设置此变量,并且在上载文档时,获取此隐藏值并使用它。我认为这是一个控制中的错误,或者是由于一些不明显的原因实现的。实际上,此控件不支持页面上的多个实例。考虑使用或自定义“代码> Ajax FielUpad < /COD>控件的位源。如果您喜欢第二个选项,则需要从此处下载源代码:并更改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; }
}
实际上,如果您查看
AjaxFileUpload
类的PreRender
方法,您将很容易了解此控件的此类行为的原因(第一个控件处理从页面上的所有同级控件上载)。我创建了一个名为“数据上载类型”的数据属性在所有AjaxFileUpload控件上,并将其设置为类型的名称。然后我设置客户端调用以获取该值,并设置具有相同值的cookie。cookie在服务器端函数上接收,我根据接收到的值进行分支
以下是一个例子:
函数启动加载(发送方,参数){
var t=$(sender.\u元素).attr('data-upload-type');
document.cookie='upload type='+$(sender._元素).attr('data-upload-type')+';';
}
然后在服务器端上传调用中,只需检查Response.Cookies(“上传类型”)。
工作起来很有魅力 我不确定我是否理解你的解决方案。如何使用此隐藏值?你能提供一个小的代码示例吗?@mcfea我也有同样的问题。。你能说说如何编辑ajax的源代码并使用它吗it@VigneshKumar,我已经有很长时间没有看过这段代码了。根据上面Yuriy Rozhovetskiy的评论,我切换到AsyncFileUpload控件。我从来没有真正抽出时间来修改源代码,因为异步满足了我们的需要。哇!你的回答是经过深思熟虑的。我继续切换到AsyncFileUpload,发现它工作得非常好。接下来我会尝试一下源代码,但现在可以了。谢谢Yuriy Rozhovetskiy感谢您的回答…我不知道如何实现上述代码..您能建议meI按照您所说的更改源代码吗,但我如何使用该源代码以及在何处构建。。。。
public class AjaxFileUpload : ScriptControlBase
{
private const string ContextKeySuffix = "{DA8BEDC8-B952-4d5d-8CC2-59FE922E2923}";
private string ContextKey
{
get { return this.UniqueID + "_" + ContextKeySuffix; }
}
function StartUpload(sender, args) {
var t = $(sender._element).attr('data-upload-type');
document.cookie = 'upload-type=' + $(sender._element).attr('data-upload-type') + ';';
}
<asp:AjaxFileUpload ID="afuUploader1" runat="server" OnClientUploadStart="StartUpload" OnUploadComplete="UploadComplete" OnClientUploadComplete="UploadComplete" data-upload-type="UploadType2"></asp:AjaxFileUpload>