Есть ли способ передать уникальный идентификатор клиента для кодирования? У меня есть изображение в gridview, и я хочу сделать что-то вроде этого:
<asp:ImageButton ID="imbView" runat="server" ToolTip="View details" ImageUrl="~/css/images/View.png" CommandName="wView" CommandArgument='#<%=imbView.ClientID%>' />
При отладке, хотя я вижу, что мой CommandArgument
равен #<%=imbView.ClientID%>
..
Чтобы указать: я хочу передать то, что однозначно идентифицирует сгенерированные элементы (и я думал, что ClientID будет хорошим способом его идентифицировать).
А?
Предполагая, что вы
<asp:ImageButton ID="imbView" runat="server" ToolTip="View details" ImageUrl="~/css/images/View.png" CommandName="wView" OnCommand="aaa" />
тогда -
protected void aaa(object sender, CommandEventArgs e)
{
var a= (sender as Control).ClientID;
}
as
результат
Вот как вы извлекаете CommandArgument внутри события RowCommand.
Вы также можете использовать e.CommandSource as ImageButton
внутри события RowCommand.
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField HeaderText="Detail">
<ItemTemplate>
<asp:ImageButton ID="imbView" runat="server"
ToolTip="View details" ImageUrl="~/css/images/View.png"
CommandName="wView"
CommandArgument='<%# Eval("Id") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Name" DataField="Name">
</asp:BoundField>
</Columns>
</asp:GridView>
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = new List<Item>
{
new Item {Id = 1, Name = "John"},
new Item {Id = 2, Name = "Eric"},
};
GridView1.DataBind();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "wView")
{
var imageButton = e.CommandSource as ImageButton;
string clientId = imageButton.ClientID;
int id = Convert.ToInt32(e.CommandArgument);
}
}
#<%=imbView.ClientID%>
недопустимый синтаксис. Это должно быть<%# imbView.ClientID%>
; даже тогда не имеет смысла передавать идентификатор клиента таким образом на сторону сервера. Где вы хотите получить доступ к этому элементу управления сервером? Другими словами, как называется событие?OnRowCommand
. В моемOnRowCommand
я могу получить доступ кCommandName
иCommandArgument
. Но это не очень помогает, если я не могу отправить CommandArgument, который однозначно идентифицирует мою кнопку (или ячейку, или строку)