【问题标题】:Returning data with AjaxControlToolkit's async AJAXFileUpload control in ASP.NET在 ASP.NET 中使用 AjaxControlToolkit 的异步 AJAXFileUpload 控件返回数据
【发布时间】:2012-10-16 07:47:12
【问题描述】:

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

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

代码如下:

.ASPX

<div style="float:left; width: 325px;">
    <cc1:AjaxFileUpload ID="AjaxFileUpload1" runat="server" Width="325px" 
         onuploadcomplete="UploadComplete" ClientIDMode="Static" />
    <cc1:DynamicPopulateExtender ID="AjaxFileUpload1_DynamicPopulateExtender" 
        runat="server" Enabled="True" PopulateTriggerControlID="" 
        TargetControlID="AjaxFileUpload1">
    </cc1:DynamicPopulateExtender>
</div>
<div style="float:left">Latitude:
    <asp:TextBox ID="tbUploaderLat" runat="server" 
        ontextchanged="tbUploaderLat_TextChanged" AutoPostBack="True"></asp:TextBox><br />
    Longitude:
    <asp:TextBox ID="tbUploaderLon" runat="server"
        ontextchanged="tbUploaderLon_TextChanged" AutoPostBack="True"></asp:TextBox>
</div>

代码隐藏:

protected void UpdateLatLon() //this is called from the two events above
{
    AjaxFileUpload1.ContextKeys = tbUploaderLat.Text + "|" + tbUploaderLon.Text;
}

【问题讨论】:

  • 首先,为什么你决定 ContextKeys 是一个静态属性?其次,这很有趣,但看起来今天你并不是唯一一个反对 ContextKeys 属性的人:stackoverflow.com/questions/13080186/…
  • 这是我正在尝试但忘记撤消的事情。我不确定我在做什么。我是一名科学程序员,而不是网络程序员。只是我的一个项目需要一个网络界面,所以我想尽可能快地学习。

标签: asp.net ajax ajaxcontroltoolkit


【解决方案1】:

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

function uploadStarted(sender, args) {
     var latitude = $get("<%= tbUploaderLat.ClientID %>").value;
     var longitude = $get("<%= tbUploaderLon.ClientID %>").value;
     sender.contextKeys = { "latitude": latitude, "longitude": longitude };
}​

之后,您可以在 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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多