0

我试图弄清楚如何使用内联变量调用方法,例如下面的示例 f。

<table stuff here>
<% foreach (Foo f in listOfFoos) { %>
<tr>
    <td>
        <%= Fubar(f)%>
    </td>
    <td>
        <%= Fubar1(f) %>
    </td>
    <td>
        <%= Fubar2(f)%>
    </td>
    <td>
        <%= Fubar3(f)%>
    </td>
    <td>
        <%= Fubar4(f)%>
    </td>
    <td>
        <%= Fubar5(f)%>
    </td>
    <td>

    <asp:Button Text="Click me!" runat="server"  OnClick="FooBar"/>

    </td>
</tr>

方法的定义看起来像(在后面的代码中定义)

public void FooBar(Foo myFoo);

我想在点击时调用该方法,并传入 f. 我是asp.net的新手!

4

2 回答 2

0

请改用中继器。从我的脑海中添加这个可能会有一些错误,但使用中继器的想法是重要的部分。

ASPX

<table>
<asp:Repeater ID="rptFubars" runat="server">
    <ItemTemplate>
        <tr>
            <td>
                <%# Fubar(Container.DataItem as [DATA_ITEM_TYPE!!])%>
            </td>
            <td>
                <%# Fubar1(Container.DataItem as [DATA_ITEM_TYPE!!])%>
            </td>
            <td>
                <%# Fubar2(Container.DataItem as [DATA_ITEM_TYPE!!])%>
            </td>
            <td>
                <%# Fubar3(Container.DataItem as [DATA_ITEM_TYPE!!])%>
            </td>
            <td>
                <%# Fubar4(Container.DataItem as [DATA_ITEM_TYPE!!])%>
            </td>
            <td>
                <%# Fubar5(Container.DataItem as [DATA_ITEM_TYPE!!])%>
            </td>
            <td>

            <asp:Button Text="Click me!" runat="server"  OnClick="FooBar"/>

            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>
</table>

代码背后

rptFubars.DataSource = listOfFoos;
rptFubars.DataBind();
于 2013-04-10T21:08:11.357 回答
0

首先 FooBar 必须有这个签名:

private void FooBar(object sender, EventArgs e)
{
}

但是,最好使用OnCommand而不是 OnClick,将 f 的 Id(或 f 的其他标识符)作为 CommandArgument 传递。

<table stuff here>
 <% foreach (Foo f in listOfFoos) { %>
  <tr>
   <td>
     <%= Fubar(f)%>
   </td>
   <td>
     <%= Fubar1(f) %>
   </td>
   <td>
     <%= Fubar2(f)%>
   </td>
   <td>
     <%= Fubar3(f)%>
   </td>
   <td>
     <%= Fubar4(f)%>
   </td>
   <td>
     <%= Fubar5(f)%>
   </td>
   <td>
     <asp:Button Text="Click me!" runat="server"  OnCommand="FooBar" CommandName="SomeCommnad" CommandArgument="<%= f.Id >" />
   </td>
 </tr>
...

FooBar 的签名将是:

private void FooBar(Object sender, CommandEventArgs e)
{}
于 2013-04-10T21:10:37.530 回答