【问题标题】:Create Button with event handler on button click without putting it on page_load event in Asp.net在按钮单击时使用事件处理程序创建按钮,而不将其放在 Asp.net 中的 page_load 事件中
【发布时间】:2018-11-30 12:14:00
【问题描述】:

我想根据一些选定的搜索选项获取一些学生条目,并希望将编辑和删除按钮与之关联。

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)
{

}

【问题讨论】:

  • 如果您不在 PostBack 上重新创建这些按钮,它们的事件将不会触发。
  • 我正在使用按钮单击创建这些按钮。所以这些都是在回帖上创建的。也比它没有触发。

标签: asp.net


【解决方案1】:

当 ASP.NET 完成页面呈现后,整个页面对象以及已创建的所有按钮都将被销毁——包括您通过代码添加的动态按钮。

当用户单击“编辑”按钮时,页面再次返回,并且“编辑”按钮无处可寻。为什么?由于page_load中没有添加该按钮,因此仅在用户单击search_text时为往返创建。所以按钮消失了,它的事件不会触发。

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

【讨论】:

  • 感谢您的回复。我明白了。但我不知道我需要多少按钮。这取决于检索到的值。那么,我如何创建按钮并将属性设置为 true 和 false。
  • 您可以看到我的问题“带按钮的列表”的第二张图片。这可以让您全面了解我的问题。
猜你喜欢
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多