0

動的 HTML コントロールを生成しています。コントロールは、ユーザーがボタンを押してポストバックを発生させた後、Init で生成されています。ただし、コントロールが生成されるように、2 回押す必要があります。どうすればこれを修正できますか? コード:

 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;
    }
4

4 に答える 4

1

GenerateDynamicControls(id) を呼び出します。ボタンがクリックされたとき。そうすれば、最初のクリックでコントロールできます。また、ページがリロードされると、OnInit で再作成されます。

protected void Button1_Click(object sender, EventArgs e)
{
    string id = TextBox1.Text;
    Session["id"] = id;
    GenerateDynamicControls(id);
}
于 2013-03-19T10:29:37.113 に答える
1

Session["id"]ページのロード時に null に設定されます。ボタンのクリック後にページがポストバックされると、OnInitメソッドが最初に呼び出され、Session["id"]asの値が取得されnullます。その後、ボタンクリックイベントが実行され、Session["id"]設定されます。したがって、ボタンを2回クリックすると、 forOnInit以外の値があり、2回目のクリックでコードが実行されます。nullSession["id"]

于 2013-03-19T10:27:15.477 に答える
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);
}
于 2013-03-19T10:32:48.607 に答える
1

これを試して、

protected override void OnInit(EventArgs e)
{
     if (Page.IsPostBack)
     {
         string id = Request.Form[TextBox1.ClientID].ToString();
         GenerateDynamicControls(id);
     }
}
于 2013-03-19T10:47:57.320 に答える