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;
}
没有必要将会话用于这些目的。此外,您的代码可能会在后续回发后失败。
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);
}
}