asp.net按钮需要触发两次

本文关键字:两次 net 按钮 asp | 更新日期: 2023-09-27 18:04:43

我正在生成动态html控件。在用户按下按钮导致回发后,Init上会生成控件。但是,他需要按两次才能生成控件。我该怎么解决这个问题?代码:

 protected override void OnInit(EventArgs e)
    {
        if (Page.IsPostBack)
        {
            if (Session["id"] != null)
            {
                string id= Session["id"].ToString();
                GenerateDynamicControls(id);
            }
        }
    }
 protected void Page_Load(object sender, EventArgs e)
    {
        Session["id"] = null;
    }
protected void Button1_Click(object sender, EventArgs e)
    {
        string id = TextBox1.Text;
        Session["id"] = id;
    }

asp.net按钮需要触发两次

没有必要将会话用于这些目的。此外,您的代码可能会在后续回发后失败。

protected override void LoadViewState(object state)
{
    base.LoadViewState(state);
    var id = this.ViewState["DynamicControlGeneration"] as string;
    if (id != null)
        GenerateDynamicControls(id);
}
protected void Button1_Click(object sender, EventArgs e)
{
    string id = TextBox1.Text;
    this.ViewState["DynamicControlGeneration"] = id;
    GenerateDynamicControls(id);
}

Session["id"]在页面加载时设置为null。单击按钮后返回页面时,首先调用OnInit方法,并将Session["id"]的值作为null。之后,执行按钮点击事件并设置Session["id"]。因此,当您第二次单击按钮时,OnInit的值不是Session["id"]null,并且您的代码在第二次点击时执行。

调用GenerateDynamicControls(id(;单击按钮时。这样一来,你就可以在第一次点击时进行控制。当页面重新加载时,它们将在OnInit中重新创建。

protected void Button1_Click(object sender, EventArgs e)
{
    string id = TextBox1.Text;
    Session["id"] = id;
    GenerateDynamicControls(id);
}

试试这个,

protected override void OnInit(EventArgs e)
{
     if (Page.IsPostBack)
     {
         string id = Request.Form[TextBox1.ClientID].ToString();
         GenerateDynamicControls(id);
     }
}