我正在尝试将OnClick属性添加到后面的代码中的按钮。取决于Attending元素是否为0,将确定添加哪个OnClick属性。当我单击带有下面代码的按钮时,我收到以下错误:
“Microsoft JScript运行时错误: Sys.WebForms.PageRequestManagerServerErrorException:无效的回发 或回调参数。使用配置或<%@ Page启用事件验证 EnableEventValidation =“true”%>在一个页面中。出于安全考虑, 此功能验证回发或回调事件的参数 源自最初呈现它们的服务器控件。如果 数据有效且预期,使用 ClientScriptManager.RegisterForEventValidation方法 注册回发或回调数据以进行验证。“
我做错了什么?
ASPX
<%@ Page Title="" Language="C#" EnableEventValidation="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="test.CommunityEvents.Default" %>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DataList ID="DataList1" RepeatColumns="1" CellPadding="5" OnItemDataBound="Dl1_ItemDataBound"
runat="server">
<ItemTemplate>
<div id="Attendingbox" runat="server">
<asp:Label ID="AttendingorNot" runat="server"></asp:Label>
</div>
<br />
<asp:Button ID="SignupButton" runat="server" Text="" />
</ItemTemplate>
</asp:DataList>
</ContentTemplate>
</asp:UpdatePanel>
背后的代码
protected void Dl1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
.....//removed other code to save space
Button SignupButton = (Button)e.Item.FindControl("SignupButton");
if (Attending == 0)
{
AttendingorNot.Text = "You are not attending";
AttendingorNot.Attributes.Add("class", "alert");
SignupButton.Text = "Attend";
SignupButton.Attributes.Add("class", "btn btn-large btn-success");
SignupButton.Click += new EventHandler(Submit_Add);
}
else
{
AttendingorNot.Text = "You are attending!";
AttendingorNot.Attributes.Add("class", "alert alert-success");
SignupButton.Text = "Remove";
SignupButton.Attributes.Add("class", "btn btn-large btn-danger");
SignupButton.Click += new EventHandler(Submit_Remove);
}
}
}
private void Submit_Remove(object sender, EventArgs e)
{
Response.Redirect("Default.aspx?msg=work");
}
private void Submit_Add(object sender, EventArgs e)
{
Response.Redirect("Default.aspx?msg=gone");
}
答案 0 :(得分:7)
使用以下代码
Button1.Attributes.Add("OnClick","btn_Click");
或
Button1.Click += new EventHandler(btn_Click);
这是按钮点击方法
protected void btn_Click(object sender, EventArgs e)
{
do anything...
}
答案 1 :(得分:1)
如果要动态附加按钮事件,则需要使用按钮的CommandName,并在ItemCommand事件中捕获事件。
主要优点是您可以捕获单击的行。
protected void Dl1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
....
Button SignupButton = (Button)e.Item.FindControl("SignupButton");
if (Attending == 0)
{
SignupButton.Text = "Attend";
SignupButton.Attributes.Add("class", "btn btn-large btn-success");
SignupButton.CommandName = "Attend";
}
else
{
SignupButton.Text = "Remove";
SignupButton.Attributes.Add("class", "btn btn-large btn-danger");
SignupButton.CommandName = "Remove";
}
}
}
protected void Dl1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "Attend")
{
Response.Redirect("Default.aspx?msg=work");
}
else if (e.CommandName == "Remove")
{
Response.Redirect("Default.aspx?msg=gone");
}
}
答案 2 :(得分:-1)
使用此
AddHandler btn.Click, AddressOf [FunktionName]