Передать объект как CommandArguement в кнопке ссылки повторителя

У меня есть повторитель со списком клиентов. Против каждого клиента есть кнопка удаления ссылки. Как часть кнопки ссылки, я хочу передать объект Customer в Command Arguement следующим образом (где Container.DataItem - объект customer):

<asp:LinkButton  ID="lnkDelete" 
   OnClientClick="return confirmDelete();"  
   OnClick="Customer_OnDelete"  
   CommandArgument="<%# Container.DataItem  %>"  
   CommandName="Delete" 
   runat="server"></asp:LinkButton>

Когда я делаю это:

    var button = (((LinkButton) sender));

    var customer=  button.CommandArgument;

button.CommandArguement является строкой. Мне нужны все свойства объекта, так как мы используем Nhibernate, поэтому все должно быть установлено, ID удаленной записи недостаточно. В Интернете я видел примеры передачи списка значений через запятую в аргумент команды, но хочу этого не делать. Это возможно?

Есть идеи? Спасибо

2 ответа

Решение

На мой взгляд, лучший способ для этого случая:

  • Получить идентификатор от CommandArgument
  • Получить клиента по идентификатору
  • Удалить объект клиента

Использовать Repeater событие OnItemCommand, Это событие содержит RepeaterCommandEventArgs, Вы не можете получить CommandArgument сюда:

protected void myRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
   int customerID= Convert.ToInt32(e.CommandArgument.ToString());
}

В твоем asp:LinkButton использование тегов:

CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID") %>'

Проблема, с которой вы здесь сталкиваетесь, заключается в том, что ваш ретранслятор должен быть переведен в HTML. Поэтому вы ограничены пределами того, что разрешено спецификацией в атрибуте элемента.

На стороне сервера CommandArgument всегда будет строкой, поэтому вы не можете делать то, что хотите, так как у вас есть это.

Теперь... есть несколько хаков, которые вы могли бы реализовать, чтобы обойти это, например, вышеупомянутый CSV, или вы могли бы использовать двоичную сериализацию и Base64 кодировать результат. Тем не менее, это все ужасные решения!

Что вам нужно, это переосмыслить, как вы это делаете. Я обещаю, что есть более простой способ.

Другие вопросы по тегам