是否可以将CommandArgument
参数内的多个参数传递给ASP.NET Repeater的ItemCommand
处理程序?
我有一个表格,我用几列来渲染,非常基本,我只需要一个linkbutton
,点击它时,我需要将3个参数传递给onclick
函数,这三个都是数据绑定参数。似乎没有办法这样做,除了使用CSV格式(这对我不起作用,因为值本身可以包含逗号)。
那么,是否可以按照以下代码中的p_field1
,p_field2
和p_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>
答案 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