在按钮单击时创建带有事件处理程序的按钮,而不将其置于Asp.net中的page_load事件中

时间:2018-11-30 12:14:00

标签: asp.net

我想基于某些选定的搜索选项来获取一些学生条目,并希望将其与编辑和删除按钮相关联。

Search Elements

在上图中。通过单击搜索按钮。我正在生成学生列表以及相关的“编辑和删除”按钮。但这不是调用事件处理程序。 list With Buttons.

.aspx代码:

<div class="col-md-4">
                    <br />
                    <asp:TextBox runat="server" ID="search_text"></asp:TextBox>
                    <asp:LinkButton class="btn btn-primary" runat="server" OnClick="search_text_Click" ValidationGroup="submit">Search  <i class="fa fa-angle-double-right"></i></asp:LinkButton>
                </div>
<div class="row" runat="server">
                <div class="col-md-12">
                    <asp:Panel runat="server" ID="ShowContentPanel" HorizontalAlign="Center"></asp:Panel>
                </div>
            </div>

.aspx.cs代码: 通过搜索按钮点击事件。

protected void search_text_Click(object sender, EventArgs e)
{
    **Fetching the values**

    Button button1 = new Button();
    button1.Text = "Edit";
    button1.ID = "Edit_" + id1 + "_" + id2;
    button1.CssClass = "btn btn-info btn-md";
    button1.Click += new EventHandler(Edit_Click);
    ShowContentPanel.Controls.Add(button1);

    Label space = new Label();
    space.Text = "&nbsp;";
    ShowContentPanel.Controls.Add(space);

    Button button2 = new Button();
    button2.Text = "Delete";
    button2.ID = "Del_" + id1 + "_" + id2;
    button2.CssClass = "btn btn-warning";
    button2.Click += new EventHandler(Delete_Click);
    ShowContentPanel.Controls.Add(button2);           
}

对于这些按钮,我们有两个事件处理程序

private void Edit_Click(object sender, EventArgs e)
{

}

private void Delete_Click(object sender, EventArgs e)
{

}

1 个答案:

答案 0 :(得分:0)

ASP.NET完成页面呈现后,整个页面对象以及所有已创建的按钮(包括您通过代码添加的动态按钮)都会被破坏。

当用户单击“编辑”按钮时,页面再次回发,并且找不到“编辑”按钮。为什么?由于未在page_load中添加按钮,因此仅当用户单击search_text时才为往返创建按钮。因此按钮消失了,它的事件也不会触发。

在这种情况下,最好将控件添加到page_load事件中(正常方式)。如果只希望在用户单击某些文本时显示“编辑”按钮,则默认情况下将其“可见性”属性设置为false,并在用户单击文本时将其设置为true。这样,按钮始终存在,您不必担心创建按钮来处理事件。或者更好的方法是,仅使用CSS隐藏它,然后使用Javascript取消隐藏,这将使用户不​​必为了显示一个按钮而往返于服务器。