从代码隐藏中添加“单击到”按钮
本文关键字:单击到 按钮 单击 代码 隐藏 添加 | 更新日期: 2023-09-27 18:32:59
我正在尝试从代码隐藏中向按钮添加OnClick属性。根据参与元素是否为 0,将确定添加哪个 OnClick 属性。当我单击带有以下代码的按钮时,出现以下错误:
"Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerServerErrorException: 无效回发 或回调参数。 在配置或 <%@ 页面中启用事件验证 EnableEventValidation="true" %> in a page。 出于安全目的, 此功能验证回发或回调事件的参数 源自最初呈现它们的服务器控件。 如果 数据有效且预期,请使用 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");
}
使用以下代码
Button1.Attributes.Add("OnClick","btn_Click");
或
Button1.Click += new EventHandler(btn_Click);
这是按钮点击方法
protected void btn_Click(object sender, EventArgs e)
{
do anything...
}
如果要
动态附加按钮的事件,则需要使用按钮的命令名称,并在 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");
}
}
使用这个
AddHandler btn.Click, AddressOf [FunktionName]