0

ユーザーが非同期コールバックでアップロードできるようにしたいファイルのリスト(データベースに保存されている)があります。

期待している各ファイルの名前の横に、 AJAXControlToolkitのAsyncFileUploadコントロールを表示するところまで来ました。

<asp:Repeater ID="SourceTables" runat="server">
    <ItemTemplate>
        <tr>
            <td>
                <%#DataBinder.Eval(Container.DataItem, "LongName")%>
            </td>
            <td>
                <ajax:AsyncFileUpload runat="server" ClientIDMode="AutoID" />
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

これらの非同期アップロードコントロールはすべて、コードビハインドで同じメソッドを呼び出すことになります。これは問題ありませんが、ファイルを保存するときに、どのコントロールがポストバックを引き起こしているのか(つまり、いくつかのファイルのどれがちょうどアップロードされました)。ただし、リピーター内でIDを動的に設定することはできませんでした(コードビハインドからのみ可能だと思います)。

明らかにこれは機能しません:

<ajax:AsyncFileUpload ID=<%#DataBinder.Eval(Container.DataItem, "ShortName")%> runat="server" ClientIDMode="AutoID" />

各アップロードコントロールのIDをリピーター内で動的に(またはその他の方法で)設定できる別の方法や、別の方法はありますか?

4

4 に答える 4

1

リピーターの「ItemDatabound」イベントで動的にコントロールを追加できます。

于 2013-01-29T06:44:41.897 に答える
0

このようなもの

  <ajax:AsyncFileUpload runat="server" id="afuMyUpload" ClientIDMode="AutoID" OnClientUploadComplete="MyFunction" />



   foreach (Control c in SourceTables.Items)
   {
        var myUpload = c.FindControl("afuMyUpload") as AsyncFileUpload;
        //Do stuff with your control
   }
于 2013-01-16T17:33:49.133 に答える
0

IDコントロールのプロパティをバインドすることはできません。コードビハインドでコントロールを作成し、リピーターに追加する必要があります。

例:

protected void GridDataBind(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow) {
        IEnumerable list = PremiumUnitFees.PremiumAmenities.ObtainFeesForProject(IntranetUser.Current.ProjectId);
        foreach (PremiumUnitFees.PremiumAmenities feature in list) {
            e.Row.Cells(3).Controls.Add(new CheckBox {
                ID = feature.Id.ToString(),
                Text = feature.NickName,
                Checked = PremiumUnitFees.PremiumUnitView.IsUnitPremium(feature.Id, Convert.ToInt64(DataBinder.Eval(e.Row.DataItem, "Id")))
            });
        }
    }
}
于 2013-01-16T17:25:46.057 に答える
0

ポストバックイベントをどのように処理していますか?

AsyncFileUploadコントロールのUploadedCompleteイベントを使用している場合は、 AsyncFileUploadEventArgsオブジェクトを介してアップロードされたファイルを取得します。

送信者AsyncFileUploadコントロールにキャストし、 PostedFileプロパティを介してファイルを取得することもできます。

 protected void AsyncFileUpload1_UploadedComplete(object sender, AsyncFileUploadEventArgs e)
 {
     string savePath = MapPath("~/Uploads/" + Path.GetFileName(e.filename));
 }
于 2013-01-16T17:31:41.230 に答える