Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ajaxfileupload页面上的多个输入_C#_Ajaxcontroltoolkit - Fatal编程技术网

C# ajaxfileupload页面上的多个输入

C# ajaxfileupload页面上的多个输入,c#,ajaxcontroltoolkit,C#,Ajaxcontroltoolkit,我正在使用ajaxFileUpload,如下所述: 除了在同一页面上有多个文件上载控件外,它工作正常。具体来说,我尝试上传不同问题的不同文件。当我上传页面上的第一个问题时,效果很好,但页面下方的那个问题只会将其文件上传到第一个问题的答案中 我不确定这是否有意义。。。因此,它可能会帮助您了解我的页面是使用ascx文件动态填充问题的。文档ascx文件如下所示: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Docume

我正在使用ajaxFileUpload,如下所述:

除了在同一页面上有多个文件上载控件外,它工作正常。具体来说,我尝试上传不同问题的不同文件。当我上传页面上的第一个问题时,效果很好,但页面下方的那个问题只会将其文件上传到第一个问题的答案中

我不确定这是否有意义。。。因此,它可能会帮助您了解我的页面是使用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" />

我最初的想法是,不知何故,我需要帮助控件生成的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>