我正在生成动态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;
}
答案 0 :(得分:1)
Session["id"]
设置为null。在点击按钮后回发页面时,首先调用OnInit
方法,并将Session["id"]
的值设为null
。之后,执行按钮单击事件并设置Session["id"]
。因此,当您第二次点击该按钮时,OnInit
的{{1}}除null
以外的值时,您的代码将在第二次点击时执行。
答案 1 :(得分:1)
调用GenerateDynamicControls(id);单击按钮时。这样,您将在第一次点击时获得控件。当页面重新加载时,它们将在OnInit中重新创建。
protected void Button1_Click(object sender, EventArgs e)
{
string id = TextBox1.Text;
Session["id"] = id;
GenerateDynamicControls(id);
}
答案 2 :(得分:1)
无需为此目的使用会话。此外,您的代码可能会在后续回发后失败。
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);
}
答案 3 :(得分:1)
试试这个,
protected override void OnInit(EventArgs e)
{
if (Page.IsPostBack)
{
string id = Request.Form[TextBox1.ClientID].ToString();
GenerateDynamicControls(id);
}
}