从后面的代码添加OnClick到按钮

时间:2013-09-27 14:47:35

标签: c# asp.net button onclick

我正在尝试将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");
    }

3 个答案:

答案 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]