c#
  • asp.net
  • webforms
  • viewstate
  • page-lifecycle
  • 2016-09-16 6 views 0 likes 
    0

    ViewStateを有効にしているASP.NETアプリケーションでは、再度設定するだけで入力をリセットできます。ViewStateは、動的に追加されたUserControl(プレースホルダ内)の変更をPostBackに上書きします。

    ddlが "A" にバインドされます。この例では

    <asp:ScriptManager runat="server" />   
    <asp:DropDownList ID="ddl" runat="server" DataSource='<%# new string[] { "A", "B", "C" } %>' /> 
    <asp:Button ID="b" runat="server" UseSubmitBehavior="false" OnClick="b_Click" Text="Test 1" /> 
    

    _TEST.aspx.cs

    protected void Page_Load(object sender, EventArgs e) 
    { 
        this.DataBind(); 
        this.ddl.SelectedValue = "B"; 
    } 
    
    protected void b_Click(object sender, EventArgs e) 
    { 
        Console.WriteLine("Updated"); 
    } 
    

    は_TEST.aspx:ここで働く基本的な簡単なサンプルです、 "B"、 "C"はPage_Loadであり、常に "B"が選択されます。したがって、選択を変更して送信すると、リセットされます。特定の条件でいくつかのコントロールをリセットするために使用されるとします。


    は、私の場合は、Placeholderに追加された動的にロードされたUserControlに行動のこの種を必要とします。 Placeholderはコンテンツを保持しないため、すべてのポストバックでコントロールを再作成する必要があります。 ViewStateは大丈夫です。ここではサンプルです:

    _TEST.aspx

    <asp:ScriptManager runat="server" /> 
    <asp:PlaceHolder ID="ph" runat="server" /> 
    

    _TEST.aspx.cs

    protected void Page_Load(object sender, EventArgs e) 
    { 
        _TESTUC uc = (_TESTUC)this.Page.LoadControl("~/Controls/_TESTUC.ascx"); 
        this.ph.Controls.Add(uc); 
    } 
    

    _TESTUC.ascx

    <asp:DropDownList ID="ddl" runat="server" DataSource='<%# new string[] { "A", "B", "C" } %>' /> 
    <asp:Button ID="b" runat="server" UseSubmitBehavior="false" OnClick="b_Click" Text="Test 2" /> 
    

    _TESTUC.ascx.cs

    protected void Page_Load(object sender, EventArgs e) 
    { 
        this.DataBind(); 
        this.ddl.SelectedValue = "B"; 
    } 
    
    protected void b_Click(object sender, EventArgs e) 
    { 
        Console.WriteLine("Updated"); 
    } 
    

    は再び、すべてのポストバックで、私はテスト目的のためにDropDownListの選択をリセットしたいのですが、興味深いことに、それは私の選択を記憶しています。

    私はこれを修正するために何ができますか?

    答えて

    0

    この質問を書いているうちに私は解決策に出たが、とにかく他の人のために投稿することに決めた。

    コードビハインドにロードされているコントロールにPage_LoadPage_LoadCompleteViewStateをロードしながら、ASP.NETは、ASPXで定義されているコントロールにPage_InitPage_LoadViewStateをロードしますようです。

    protected void Page_Init(object sender, EventArgs e) 
    { 
        this.Page.LoadComplete += new EventHandler(this.Page_LoadComplete); 
    } 
    
    protected void Page_Load(object sender, EventArgs e) 
    { 
        this.DataBind(); 
    } 
    
    protected void Page_LoadComplete(object sender, EventArgs e) 
    { 
        this.ddl.SelectedValue = "B"; 
    } 
    
    protected void b_Click(object sender, EventArgs e) 
    { 
        Console.WriteLine("Updated"); 
    } 
    
    Page_LoadCompleteの値を設定する

    は、問題を解決します

    関連する問題