@Patrick 的回答是个好主意,值得更多赞誉!您可以拥有任意数量的数据项,它们都是分开的,并且可以在必要时用于客户端。
它们也可以以声明方式而不是在代码中添加。我只是为这样的 GridView 做了这个:
<asp:TemplateField HeaderText="Remind">
<ItemTemplate>
<asp:ImageButton ID="btnEmail"
data-rider-name="<%# ((Result)((GridViewRow) Container).DataItem).Rider %>"
data-rider-email="<%# ((Result)((GridViewRow) Container).DataItem).RiderEmail %>"
CommandName="Email" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/email.gif" />
</ItemTemplate>
</asp:TemplateField>
在 RowCommand 中,您可以这样做:
void gvMyView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Email")
{
var btnSender = (ImageButton)e.CommandSource;
var riderName = btnSender.Attributes["data-rider-name"];
var riderEmail = btnSender.Attributes["data-rider-email"];
// Do something here
}
}
比将所有值与分隔符一起破解并在最后再次解包要干净得多。
不要忘记测试/清理从页面返回的任何数据,以防它被篡改!