2011-12-13 18 views
1

私はドロップダウンリストを持っています。新しい値をViewState変数に保存するので、ポストバック後、ドロップダウンリストは以前に設定した場合はViewStateから選択された値を取得します。ViewStateにドロップダウンリストの選択値を保存する

選択した値をViewStateにDropDownList1_SelectedIndexChangedに格納しようとすると、常に更新された値ではなく元の値が挿入されます。この場合、ViewStateは常に「R」であり、他の選択された値に応じて変更されることはありません。

アイデア?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebApplication11 
{ 
public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (ViewState["List1_Value"] != null) 
     { 
      DropDownList1.SelectedValue = ViewState["List1_Value"].ToString(); 

     } 
     else 
     { 
      DropDownList1.SelectedValue = "R"; 

     } 

    } 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ViewState["List1_Value"] = DropDownList1.SelectedValue.ToString(); 

    }  

} 
} 
+0

viewstateに保存することで問題が解決しましたか? if文がFALSEを返すので、常にRであるとは限りませんか? –

+0

if文は最初のpage_loadでfalseを返します。次に、選択した値が変更されると、ViewStateはリストの値を保存しますが、元の "R"のみを保存します。SelectedIndexChangedを発生させるために選択された値は決して異なりません。 2度目のif文はtrueで、リストはViewStateからその値を取得します。これは、選択された新しい値をViewStateに保存しないため、やはりまだ "R"です。 –

答えて

0

SelectedIndexChangedイベントの前にPage_Loadイベントが発生します。ドロップダウンリストの値を変更すると、ViewStateの値はまだnullのままなので、ドロップダウンリストは「R」に設定されていますか?

物語のページのライフサイクルを議論する次のMSDNの記事を見て:http://msdn.microsoft.com/en-us/library/ms178472.aspx

+0

okですが、2回目のViewStateの値は「R」です。つまり、ページが再読み込みされる前にViewStateが保存されたことを意味します。 ViewStateに異なる価値をもたらす方法を理解するだけです。 –

1

変更それはポストバックでない場合、ドロップダウンリストのコードをバイパスするPage_Loadメソッド。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     if (ViewState["List1_Value"] != null) 
     { 
      DropDownList1.SelectedValue = ViewState["List1_Value"].ToString(); 
     } 
     else 
     { 
      DropDownList1.SelectedValue = "R"; 
     } 
    } 
} 
+0

あなたの提案をありがとう、これは問題を解決しました –

関連する問題