3

私は上記のコントロールを使用しています (これは ASP.NET のものであることに注意してください。JavaScript で書かれた同様の名前のコントロールを多くの人が使用しているようです)。プログレス バー、ドラッグ アンド ドロップ、その部分はすべて正常に動作しますが、ファイルと共に 2 つのデータを返す必要があります。具体的には、ユーザーが 2 つのテキスト ボックスから入力した緯度と経度です。アップロード コントロールは非同期であるため、テキスト ボックスの内容がポストバックされないため、アクセスできません。データをサーバーに送り返す ContextKeys というフックできるプロパティがあるようですが、それは静的フィールドであり、動的に操作する方法がわかりません。テキストボックスからontextchangedイベントをフックし、それらを使用してコンテキストキーを設定しようとしました。

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;
}
4

1 に答える 1

3

ここここで説明されているように 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

}
于 2012-10-26T11:42:59.007 に答える