使用AjaxControlToolkit返回数据';ASP.NET中的异步AJAXFileUpload控件

使用AjaxControlToolkit返回数据';ASP.NET中的异步AJAXFileUpload控件,asp.net,ajax,ajaxcontroltoolkit,Asp.net,Ajax,Ajaxcontroltoolkit,我正在使用上面的控件(注意,它是ASP.NET控件。我似乎看到很多人使用一个用javascript编写的类似名称的控件)来允许通过进度条、拖放等上传多个文件。这部分工作正常,但我需要随文件返回两个数据。具体来说,它是用户从两个文本框中输入的纬度和经度。由于上载控件是异步的,文本框的内容不会被发回,因此我无法访问它们。似乎有一个属性我可以钩住,ContextKeys,它会将数据发送回服务器,但它是一个静态字段,我不知道如何动态操作它。我尝试从文本框中挂接ContextChanged事件,并使用这些

我正在使用上面的控件(注意,它是ASP.NET控件。我似乎看到很多人使用一个用javascript编写的类似名称的控件)来允许通过进度条、拖放等上传多个文件。这部分工作正常,但我需要随文件返回两个数据。具体来说,它是用户从两个文本框中输入的纬度和经度。由于上载控件是异步的,文本框的内容不会被发回,因此我无法访问它们。似乎有一个属性我可以钩住,ContextKeys,它会将数据发送回服务器,但它是一个静态字段,我不知道如何动态操作它。我尝试从文本框中挂接ContextChanged事件,并使用这些事件设置上下文键。post-back可以工作,并且似乎可以设置值,但是当用户按下upload按钮时,ContextKeys值为空

有没有人知道如何通过编程设置ContextKeys属性,或者以其他方式将数据发送回上传

代码如下:

.ASPX


您可以按说明自定义AjaxFileUpload控件,并将文本框值传递给UploadCompleted事件处理程序,如下所示:

function uploadStarted(sender, args) {
     var latitude = $get("<%= tbUploaderLat.ClientID %>").value;
     var longitude = $get("<%= tbUploaderLon.ClientID %>").value;
     sender.contextKeys = { "latitude": latitude, "longitude": longitude };
}​
函数上载已启动(发送方,参数){
变量纬度=$get(“”).value;
变量经度=$get(“”).value;
sender.contextKeys={“纬度”:纬度,“经度”:经度};
}​
之后,您可以在UploadComplete处理程序中获取纬度和经度值:

protected void AjaxFileUpload1_OnUploadComplete(object sender, AjaxFileUploadEventArgs file)
{
    if (!string.IsNullOrEmpty(file.ContextKeys))
    {
        var longLat = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Dictionary<string, string>>(file.ContextKeys);
        var longitude = longLat["longitude"];
        var latitude = longLat["latitude"];
    }

    //code to save file

}
protectedvoid AjaxFileUpload1\u OnUploadComplete(对象发送方,AjaxFileUploadEventArgs文件)
{
如果(!string.IsNullOrEmpty(file.ContextKeys))
{
var longLat=new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize(file.ContextKeys);
var经度=longLat[“经度”];
var纬度=朗拉特[“纬度”];
}
//保存文件的代码
}

首先,您为什么决定ContextKeys是静态属性?第二,这很有趣,但今天看来,你并不是唯一一个反对ContextKeys属性的人:这是我一直在尝试但忘记撤销的东西。我真的不确定我在做什么。我是科学程序员,不是网络程序员。只是我的一个项目需要一个网络界面,所以我正试图尽快学习。
function uploadStarted(sender, args) {
     var latitude = $get("<%= tbUploaderLat.ClientID %>").value;
     var longitude = $get("<%= tbUploaderLon.ClientID %>").value;
     sender.contextKeys = { "latitude": latitude, "longitude": longitude };
}​
protected void AjaxFileUpload1_OnUploadComplete(object sender, AjaxFileUploadEventArgs file)
{
    if (!string.IsNullOrEmpty(file.ContextKeys))
    {
        var longLat = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Dictionary<string, string>>(file.ContextKeys);
        var longitude = longLat["longitude"];
        var latitude = longLat["latitude"];
    }

    //code to save file

}