Событие команды строки не срабатывает для кнопки изображения в gridview?

У меня есть сетка с кнопкой изображения в каждой строке. Я установил имя команды и аргумент команды.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="1" CellSpacing="1" CssClass="one-column-emphasis" DataKeyNames="Id" OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound">

<asp:TemplateField>
                <ItemTemplate>
                    <asp:ImageButton ID="ImageButton1" runat="server" AlternateText="Register" CssClass="buttonreg" EnableTheming="False" CommandArgument='<%# Eval("Id") %>' CommandName="register" />
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Center" />
            </asp:TemplateField>

Я получаю следующую ошибку:

Недействительный аргумент обратной передачи или обратного вызова. Проверка событий включается с помощью в конфигурации или ‹% @ Page EnableEventValidation =" true "%> на странице. В целях безопасности эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова исходят от серверного элемента управления, который изначально их визуализировал. Если данные действительны и ожидаются, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки.

Что мне не хватает?


person user3065219    schedule 23.01.2014    source источник


Ответы (5)


Установите для свойства AutoPostBack DropDownList значение False. Убедитесь, что в событии Page_Load,

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
      //Call Grid() function.
    }

}

Вызовите функцию Grid () в событии SelectIndexChanged объекта DropDownList. Спасибо всем за помощь.

person user3065219    schedule 24.01.2014

Когда вы используете gridview, привяжите это в

protected void Page_Load(Object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        Binddatagrid();
    }
}

зарегистрируйте свой метод обратной передачи ClientScriptManager.RegisterForEventValidation

person Nagaraj S    schedule 23.01.2014
comment
У меня есть выпадающий список, содержащий также месяц. Вид сетки привязан к выбранному месяцу. Когда я использую ваш код, gridview не показывает данных. - person user3065219; 23.01.2014
comment
или установите для EnableEventValidation для страницы значение false - person Nagaraj S; 23.01.2014

Используйте этот код

HTML-код:

<asp:GridView ID="mygrid" CssClass="reportgrid" EmptyDataRowStyle-CssClass="userwel"
                                        DataKeyNames="JudgementId, titles, Is_Active" AutoGenerateColumns="false" Width="800px" runat="server" OnRowCommand="mygrid_RowCommand">
<EmptyDataTemplate>  
 No Data Found.
</EmptyDataTemplate>
 <Columns>
<asp:TemplateField HeaderText="Name" HeaderStyle-HorizontalAlign="Left">
 <ItemTemplate>                                           
<asp:Label ID="label_Address" Text='<%# Bind("titles")%>' runat="server"></asp:Label>
 </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Status" HeaderStyle-HorizontalAlign="Left">
<ItemTemplate>
<asp:Label ID="lblstatus" Text='<%# Bind("Is_Active")%>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Edit" ItemStyle-Width="43px">
<ItemTemplate>
<asp:ImageButton ID="imgedit" runat="server" alt="Edit" Height="40px" Width="40px"
src="../Images/Edit.png" CommandName="edit1" CommandArgument='<%# Container.DisplayIndex %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete" ItemStyle-Width="43px">
<ItemTemplate>
<asp:ImageButton ID="imgdelete" runat="server" alt="Edit" Height="40px" Width="40px"
src="../Images/delete.png" CommandName="delete1" CommandArgument='<%# Container.DisplayIndex %>' OnClientClick="return ConfirmationBox();" />
 </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="View" ItemStyle-Width="43px">
<ItemTemplate>
<asp:ImageButton ID="imgview" runat="server" alt="Edit" Height="40px" Width="40px"
src="../Images/view.png" CommandName="view1" CommandArgument='<%# Container.DisplayIndex %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

.cs код

 protected void mygrid_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int row = Convert.ToInt32(e.CommandArgument);        
                int JudgementId = Convert.ToInt32(gvL_Judgement.DataKeys[Convert.ToInt32(e.CommandArgument)]["JudgementId"]);
                if (e.CommandName == "edit1")
                {
                    //code to edit
                }
                if (e.CommandName == "view1")
                {
                    //code to view
                }
                if (e.CommandName == "delete1")
                {
                    //code to delete
                }
            }
            catch (Exception ex)
            {

            }
        }
person Surendra    schedule 23.01.2014

Метод FillGrid () должен вызываться как.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        FillGrid();
    }
}
person user2174794    schedule 12.11.2014

это старый поток, но я подумал об ответе, потому что мне было трудно найти решение для этого.

Решение в том, что вам нужно использовать if (!IsPostBack)

но в моем случае у меня ничего не было написано в моем событии Page_Load страницы .aspx, но у меня был код ниже на моей главной странице.

protected void Page_Load(object sender, EventArgs e)
{
    Page.DataBind();
}

как только я поместил этот Page.Databind (); внутри, если (! IsPostBack) проблема решена.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Page.DataBind();
    }
}

Надеюсь, кому-нибудь это пригодится.

person Rananga    schedule 04.06.2015