Передать объект как 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 кодировать результат. Тем не менее, это все ужасные решения!
Что вам нужно, это переосмыслить, как вы это делаете. Я обещаю, что есть более простой способ.