我有一个Datalist,它在updatepanel中,它在modalpopupextender中的panel中;
我可以随心所欲地列出项目。我也为删除和AddBelow放了2个按钮。下面是标记:
<asp:DataList ID="SpeedDialsDL" runat="server">
<ItemTemplate>
<table id="speedDialValueEditorTable" width="100%">
<tr>
<td width="275px">
<asp:Label ID="ValueLabel" runat="server" Text="Value"></asp:Label>
</td>
<td>
<asp:TextBox ID="ValueTextBox" runat="server" Text='<%# Eval("Value") %>' Width="340px"
Enabled="false"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="Delete" runat="server" Text="Delete" CommandName="Delete"
CausesValidation="false" />
<asp:Button ID="AddNewButton" runat="server" Text="AddBelow" CommandName="AddBelow"
CausesValidation="false" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>并像下面这样注册:(我同时使用了ItemCommand和DeleteCommand来看看哪一个有效:)
protected void Page_Load(object sender, EventArgs e)
{
SpeedDialsDL.ItemCommand += SpeedDialsDL_ItemCommand;
SpeedDialsDL.DeleteCommand += SpeedDialsDL_ItemCommand;
}
void SpeedDialsDL_ItemCommand(object source, DataListCommandEventArgs e)
{
switch (e.CommandName)
{
case "Delete":
this.DeleteFromList((string)e.CommandArgument);
break;
case "AddBelow":
break;
}
}但当我单击Delete或AddBelow按钮时,我得到以下错误:
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.我已禁用页面的eventvalidation,但无法捕获该事件...
这里我漏掉了什么?
发布于 2008-11-15 09:44:07
控件在呈现期间注册其事件,然后在回发或回调处理期间验证事件。您将在Page_Load期间手动注册事件。
尝试重构代码,以便在.aspx页面中指定事件处理程序,将项的Id绑定到按钮的CommandArgument,然后在处理程序中获取绑定的项Id。对于不同的事件,我也会有不同的事件处理程序,这样会更简洁一些。类似于:
<asp:DataList ID="SpeedDialsDL" runat="server">
<ItemTemplate>
<table id="speedDialValueEditorTable" width="100%">
<tr>
<td width="275px">
<asp:Label ID="ValueLabel" runat="server" Text="Value"></asp:Label>
</td>
<td>
<asp:TextBox ID="ValueTextBox" runat="server" Text='<%# Eval("Value") %>' Width="340px" Enabled="false"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="Delete" runat="server" Text="Delete" OnClick="Delete" CausesValidation="false" CommandArgument='<%# Eval("Id") %>' />
<asp:Button ID="AddNewButton" runat="server" Text="AddBelow" OnClick="AddBelow" CausesValidation="false" CommandArgument='<%# Eval("Id") %>' />
</td>
</tr>
</table>
</ItemTemplate>
protected void Delete(object sender, EventArgs e)
{
Button b = (Button)sender as Button;
string boundItemId = b.CommandArgument;
//handle delete
}
protected void AddBelow(object sender, EventArgs e)
{
Button b = (Button)sender as Button;
string boundItemId = b.CommandArgument;
//handle add below
}https://stackoverflow.com/questions/289941
复制相似问题