放置在.cs文件事件中的生成的asp.net按钮未触发

时间:2017-02-15 19:03:27

标签: c# html asp.net webforms

晚安

我动态创建的asp按钮将处理数据行的编辑和删除,但不会触发事件。

我使用html.append操作在我的aspx页面中显示一个表,然后将其放入我已添加到aspx页面的占位符中,如下所示:

 protected void Page_Load(object sender, EventArgs e)
{
    if (!(Page.IsPostBack))
    {            
        Session.Abandon();
        Session.RemoveAll();
        Session.Clear();
        HttpContext.Current.Session.Abandon();

        if (!(ConnectMysql()))
        {
            ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Failed to Connect to Database!');", true);
        }       
    }
    CreateObjs();
    GenerateHtmlTable();             
}

这是我生成表的方法

 private void GenerateHtmlTable()
{
    otblUsers.SelectAll();
    DataTable dt = otblUsers.DefaultView.ToTable();
    //Building an HTML string.
    StringBuilder html = new StringBuilder();
    //Table start.               
    html.Append("<thead>");
    //Building the Header row.
    html.Append("<tr>");
    int j = 0;
    foreach (DataColumn column in dt.Columns)
    {
        html.Append("<th>");
        html.Append(column.ColumnName);
        html.Append("</th>");
        j++;
    }
    html.Append("</tr>");
    html.Append("</thead>");

    html.Append("<tbody>");      
    //Building the Data rows.
    int rowcnt = 0;

    foreach (DataRow row in dt.Rows)
    {
        rowcnt++;
        html.Append("<tr>");
        int k = 0;
        foreach (DataColumn column in dt.Columns)
        {
            k++;
            html.Append("<td>");
                html.Append(row[column.ColumnName]);
                if (j == k) //place button before next row                
                {

                    html.Append("<div class=\"pull-right\"><asp:Button ID = \"btnEdit\" class=\"btn btn-mini\" runat= \"server\"  OnClick=\"btnEdit_Click\"  OnServerClick=\"btnedit_ServerClick\"><i class=\"icon-pencil\"></i>Edit</button></div>");
                    html.Append(" <div class=\"pull-right\"><asp:Button ID = \"btnDelete\" class=\"btn btn-mini\" runat= \"server\"  OnServerClick=\"btnedit_ServerClick\" OnClick=\"btnEdit_Click\" Type=\"submit\"><i class=\"icon-remove\"></i>Delete</button></div>");
                } html.Append("</td>");
        }            
        html.Append("</tr>");
    }

    html.Append("</tbody>");        
    //Append the HTML string to Placeholder.
    PlaceHolder1.Controls.Add(new Literal { Text = html.ToString() });

以下是不会激发的测试事件:

protected void btnedit_ServerClick(object sender, EventArgs e)
{
        Console.Write("1212");    
}
protected void  btnEdit_Click(object sender, EventArgs e)
{
    Console.Write("sdfsd");
}

这就是我将占位符添加到aspx页面的方式:

<asp:PlaceHolder ID = "PlaceHolder1" runat="server" />

我现在只有一行数据用于测试目的。我确实意识到我需要动态创建asp按钮,每行都有唯一的名称和ID。

如何让事件发生?我是一名WinForms开发人员,我知道这可能是由于缺乏经验而且可能是关于会话刷新的事情?

0 个答案:

没有答案