Asp.net Web表单在循环内生成的按钮单击传递参数

时间:2018-07-12 12:00:14

标签: c# asp.net webforms

我正在 foreach 循环

中生成按钮
<% foreach (var myObject in myObjectList)
   {
%>
       <b>Text field</b>: <%= myObject.Text%><br>                     
       <asp:Button ID="" runat="server" OnClick="WaitQueueDeleteBtn_Click" CommandArgument="pass myObjectText" Text="Delete"/>

<% } %>

似乎我无法使用myObject内的CommandArgument字段,但是可以访问myObjectList

<asp:Button ID="" runat="server" OnClick="WaitQueueDeleteBtn_Click" CommandArgument="<%#myObjectList.Count%>" Text="Delete"/>

上面的语句将起作用,但下面的语句将不起作用

<asp:Button ID="" runat="server" OnClick="WaitQueueDeleteBtn_Click" CommandArgument="<%#myObject.Text %>" Text="Delete"/>

知道为什么吗?以及如何将myObject的字段值作为CommandArgument传递?

更新

类中的按钮方法

protected void WaitQueueDeleteBtn_Click(object sender, EventArgs e)
{

}

1 个答案:

答案 0 :(得分:0)

Repeater

非常简单

标记

<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
    <ItemTemplate>
        <div><b>Text field</b>: <%# Eval("Text") %></div>
        <asp:Button runat="server" CommandArgument='<%# Eval("ID") %>' Text="Delete" />
    </ItemTemplate>
</asp:Repeater>

C#

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        Repeater1.DataSource = YOUR_DATA_SOURCE; // myObjectList
        Repeater1.DataBind();

        // ...
    }
}

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandArgument == null) return;

    var id = int.Parse(e.CommandArgument.ToString());

    // your logic here ...
}

您可以添加多个按钮,并使用CommandName可以确定单击了哪个按钮。

希望这会有所帮助。