Событие команды строки не запускается для кнопки изображения в виде сетки?
У меня есть сетка с кнопкой изображения в каждой строке. Я установил имя команды и аргумент команды.
<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, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки.
Что мне не хватает?
5 ответов
Когда вы используете gridview, свяжите это в
protected void Page_Load(Object sender, EventArgs e)
{
if(!IsPostBack)
{
Binddatagrid();
}
}
зарегистрируйте свой метод обратной передачи ClientScriptManager.RegisterForEventValidation
Установите для свойства AutoPostBack DropDownList значение False. Убедитесь, что в событии Page_Load
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Call Grid() function.
}
}
Вызовите функцию Grid() в событии SelectIndexChanged объекта DropDownList. Спасибо всем за помощь.
Метод FillGrid() должен вызываться как.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillGrid();
}
}
Это старая ветка, но я подумал об ответе, потому что мне было трудно найти решение для этого.
Решение заключается в том, что вы должны использовать if (!IsPostBack)
но в моем случае у меня ничего не было написано в моем событии Page_Load на странице.aspx, но у меня был код ниже на моей главной странице.
protected void Page_Load(object sender, EventArgs e)
{
Page.DataBind();
}
однажды я поставил эту Page.Databind(); Внутри if (!IsPostBack) проблема решена.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Page.DataBind();
}
}
Надеюсь, кто-нибудь найдет это полезным.
Используйте этот код
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 code
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)
{
}
}