0

我有一个文件列表(存储在数据库中),我希望用户能够在异步回调中上传这些文件。

我已经在我期望的每个文件的名称旁边显示 AJAX 控件工具包的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

您不能绑定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对象获取上传的文件。

您还可以将sender强制转换为AsyncFileUpload控件,然后通过PostedFile属性获取文件。

 protected void AsyncFileUpload1_UploadedComplete(object sender, AsyncFileUploadEventArgs e)
 {
     string savePath = MapPath("~/Uploads/" + Path.GetFileName(e.filename));
 }
于 2013-01-16T17:31:41.230 回答
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 回答