动态创建按钮拒绝调用它的onClick

时间:2016-08-12 19:12:35

标签: c# asp.net asp.net-mvc server-side

因此,在使用webforms时,我尝试创建一个页面,将一个表从sql server输出到Page_Load上的html表。然后我尝试将一个按钮添加到一个将重定向到页面的列。唯一的问题是,当我按下按钮时根本没有任何事情发生...我已经尝试在onclick方法中设置断点但是它们永远不会到达。

        num = ds.Tables[0].Rows.Count;
        htmlTable.Append("<tr style='background-color:#bd0000; color: White;'><th>ID</th><th>Job #</th><th>Project</th><th>Completed By</th><th>Date Created</th><th></th></tr>");

        if (!object.Equals(ds.Tables[0], null))
        {
            if (ds.Tables[0].Rows.Count > 0)              
            {
                int MAX_VIEW = (ds.Tables[0].Rows.Count > 15) ? 15 : ds.Tables[0].Rows.Count;
                for (int i = 0; i < MAX_VIEW; i++)
                {
                    htmlTable.Append("<td>" + ds.Tables[0].Rows[i]["CCPOF_ID"] + "</td>");
                    htmlTable.Append("<td>" + ds.Tables[0].Rows[i]["Job_Number"] + "</td>");
                    htmlTable.Append("<td>" + ds.Tables[0].Rows[i]["Project_Name"] + "</td>");
                    htmlTable.Append("<td>" + ds.Tables[0].Rows[i]["CompletedBy"] + "</td>");
                    htmlTable.Append("<td>" + ds.Tables[0].Rows[i]["DateCreated"] + "</td>");
                    htmlTable.Append("<td width=\"10%\"><button class=\"astext\" name=\"Btn" + ds.Tables[0].Rows[i]["CCPOF_ID"] + "\" id =\"" + ds.Tables[0].Rows[i]["CCPOF_ID"] + "\" OnClick =\"btnEdit_Click\" runat=\"server\" >Edit</button> | Details</td>");
                    htmlTable.Append("</tr>");
                }
                htmlTable.Append("</table>");
                DBDataPlaceHolder.Controls.Add(new System.Web.UI.WebControls.Literal { Text = htmlTable.ToString() });
            }
            else
            {
                htmlTable.Append("<tr>");
                htmlTable.Append("<td align='center' colspan='4'>There is no Record.</td>");
                htmlTable.Append("</tr>");
            }
        }
    }

    protected void btnEdit_Click(object sender, EventArgs e)
    {
        String id = ((System.Web.UI.WebControls.Button)sender).ID;
        Server.Transfer("CcpofDetails.aspx?ID=" + id);
    }
}

当我检查实时表格中的按钮时,这就是我所看到的

<button class="astext" name="Btn10" id="10" onclick="btnEdit_Click" runat="server">Edit</button>

3 个答案:

答案 0 :(得分:1)

我相信你的问题来自于ASP.NET并不知道你创建了一个按钮。就它而言,你所做的只是向页面输出一些文字。

因此,当您回发到服务器时,它不知道在您单击时它需要在服务器端执行任何操作。

尝试将其创建为对象(System.Web.UI.WebControls.Button)并将其添加到您网页的Controls集合中。请注意,您必须在初始页面构建和回发时执行此操作:如果控制在回发后不存在,则连接到它的事件不会触发。

让它出现在表格中间可能需要您以其他方式创建HTML表格,例如构建WebControls Table对象并将 添加到您的对象中Controls集合。

答案 1 :(得分:1)

您生成动态控件的方式对我来说似乎很奇怪。这不是网络表单的工作方式。

要在控件上运行事件,必须先将其加载到服务器内存中。但是你只是填写一些只能用于浏览器的html文本,而不是asp.net引擎。

看看this sample

为了给您一个更好的主意,请按照这样创建按钮

private void Page_Load(object sender, System.EventArgs e)
{
    if (!IsPostBack)
        AddControls();
}

protected override void LoadViewState(object savedState)
{
    base.LoadViewState(savedState);
    if (ViewState["controsladded"] == null)
    AddControls();
}

private void AddControls()
{
    TextBox dynamictextbox = new TextBox();
    dynamictextbox.Text = "(Enter some text)";
    dynamictextbox.ID = "dynamictextbox";
    Button dynamicbutton = new Button();
    dynamicbutton.Click += new System.EventHandler(dynamicbutton_Click);
    dynamicbutton.Text = "Dynamic Button";
    Panel1.Controls.Add(dynamictextbox);
    Panel1.Controls.Add(new LiteralControl("<BR>"));
    Panel1.Controls.Add(new LiteralControl("<BR>"));
    Panel1.Controls.Add(dynamicbutton);
    ViewState["controlsadded"] = true;
}

private void dynamicbutton_Click(Object sender, System.EventArgs e)
{
    TextBox tb = new TextBox();
    tb = (TextBox) (Panel1.FindControl("dynamictextbox"));
    Label1.Text = tb.Text;
}

答案 2 :(得分:0)

您没有将按钮的corectl添加到Web表单。试试这个:

Button btnEdit = New Button();
btn.Edit.Click += btnEdit_Click;
frmMain.Controls.Add(btnSave)

this question所示。