Передать идентификатор клиента в код

1

Есть ли способ передать уникальный идентификатор клиента для кодирования? У меня есть изображение в gridview, и я хочу сделать что-то вроде этого:

<asp:ImageButton ID="imbView" runat="server" ToolTip="View details" ImageUrl="~/css/images/View.png" CommandName="wView" CommandArgument='#<%=imbView.ClientID%>' />

При отладке, хотя я вижу, что мой CommandArgument равен #<%=imbView.ClientID%>..

Чтобы указать: я хочу передать то, что однозначно идентифицирует сгенерированные элементы (и я думал, что ClientID будет хорошим способом его идентифицировать).

  • 0
    #<%=imbView.ClientID%> недопустимый синтаксис. Это должно быть <%# imbView.ClientID%> ; даже тогда не имеет смысла передавать идентификатор клиента таким образом на сторону сервера. Где вы хотите получить доступ к этому элементу управления сервером? Другими словами, как называется событие?
  • 0
    @Win Не уверен, что я понимаю, что вы имеете в виду, но это в виде сетки, и кнопка image использует мой указанный OnRowCommand . В моем OnRowCommand я могу получить доступ к CommandName и CommandArgument . Но это не очень помогает, если я не могу отправить CommandArgument, который однозначно идентифицирует мою кнопку (или ячейку, или строку)
Показать ещё 1 комментарий
Теги:

2 ответа

4
Лучший ответ

А?

Предполагая, что вы

<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;
    }
  • 0
    да ... вы должны проверить as результат
  • 0
    Да, но так как это Gridview, это просто дает мне ClientID для gridview, а не фактическую кнопку изображения
Показать ещё 1 комментарий
2

Вот как вы извлекаете 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);
    }
}
  • 0
    +1 от меня. Хорошее решение тоже.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню