@ Ответ Патрика - хорошая идея, и она заслуживает большего! Вы можете иметь столько элементов данных, сколько хотите, все они разделены и могут использоваться на стороне клиента, если это необходимо.
Их также можно добавлять декларативно, а не в коде. Я просто сделал это для 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
}
}
Гораздо чище, чем взламывать все значения вместе с разделителями и снова распаковывать в конце.
Не забудьте протестировать / очистить любые данные, которые вы возвращаете со страницы, на случай, если они были подделаны!