DataRepeater OnCommand多个CommandArgument

时间:2011-02-11 21:19:02

标签: asp.net repeater

是否可以将CommandArgument参数内的多个参数传递给ASP.NET Repeater的ItemCommand处理程序?

我有一个表格,我用几列来渲染,非常基本,我只需要一个linkbutton,点击它时,我需要将3个参数传递给onclick函数,这三个都是数据绑定参数。似乎没有办法这样做,除了使用CSV格式(这对我不起作用,因为值本身可以包含逗号)。

那么,是否可以按照以下代码中的p_field1p_field2p_field3传递。 谢谢!

<asp:Repeater ID="rptId" runat="server" EnableViewState="true" OnItemCommand="rptId_ItemCommand">
                                <ItemTemplate>
                                <tr align="center" class='<asp:Literal ID="litRowClass" runat="server" />'>
                                    <td><%#Eval("p_field1")%></td>
                                    <td><%# Eval("p_field2")%></td>
                                    <td><%# Eval("p_field3")%></td>
                                    <td><%# Eval("p_field4")%></td>

                                    <td><asp:LinkButton runat="server" ID="lnkBtnId" CommandArgument='<%# Eval("p_field1") %>' CommandName="testCommandName">MARK</asp:LinkButton></td>                  




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

2 个答案:

答案 0 :(得分:2)

不幸的是,如果没有“CSV”样式格式,则无法传入多个字段;只允许一个字符串。

你必须做一些字符串连接,然后将它拆分回OnCommand。选择一些不在您的参数中的分隔符,下面我使用了|

<asp:Repeater ID="rptId" runat="server" EnableViewState="true" OnItemCommand="rptId_ItemCommand">
    <ItemTemplate>
        <tr align="center" class='<asp:Literal ID="litRowClass" runat="server" />'>
            <td><%#Eval("p_field1")%></td>
            <td><%# Eval("p_field2")%></td>
            <td><%# Eval("p_field3")%></td>
            <td><%# Eval("p_field4")%></td>
            <td><asp:LinkButton runat="server" ID="lnkBtnId" CommandArgument='<%# Eval("p_field1") + "|" + Eval("p_field2") + "|" + Eval("p_field3")  %>' CommandName="testCommandName">MARK</asp:LinkButton></td>                  
        </tr> 
    </ItemTemplate>
</asp:Repeater>

然后您需要rptId_ItemCommand中的以下内容:

string[] arguments = CommandEventArgs.CommandArgument.Split('|');

答案 1 :(得分:1)

CommandArgument='<%# JoinFields(Eval("p_field1"), Eval("p_field2"), Eval("p_field3")) %>'

你可以使用你想要的东西作为分隔符(例如管道|)。您可以轻松地在服务器端拆分这些值。要加入这些字段,您可以使用这样的辅助函数:

Protected Function JoinFields(ByVal p_field1 As Object, ByVal p_field2 As Object, ByVal p_field3 As Object) As String
   Return String.Join("|", New Object() {p_field1, p_field2, p_field3})
End Function