2011-02-16 11 views
0

私はDropDownListを持っていますが、これにはいくつかのオプションがあります。今、ユーザーがいずれかのオプションを選択したときにした後、それは同じページにリダイレクトされており、ボタンをクリックすることがあります。リダイレクト時にDropDownListの状態を記憶しています

protected void Button4_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("Graphs.aspx?Selection=" + DropDownList1.SelectedValue + "&Date1=" + TextBox1.Text + "&Date2=" + TextBox2.Text); 
} 

私はjavascriptのあるFLOTを使用しているため、私は、代わりにポストバックのリダイレクトを使用する必要がありますユーザが他のオプションを選択した場合は、すべてのコードを再度書き込む必要があります。問題は、リダイレクトされたときに何らかの理由でDropDownListの値を覚えていないということです。私はこのコードでこれを試してみました:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request.QueryString["Selection"] == "TemperatureOUT") 
    { 
     DropDownList1.SelectedIndex = 0; 
    } 
    else if (Request.QueryString["Selection"] == "Dewpoint") 
    { 
     DropDownList1.SelectedIndex = 1; 
    } 
} 

問題は、例えば、ユーザーがDropDownListコントロールから露点を選択し、リダイレクトを引き起こしボタン、上のクリックした場合、新しいURLが持つべき、次のとおりです。

Graphs.aspx?Selection=Dewpoint&... 

代わりに、それは言う:

私はPage_Loadからそのコードを削除すると、それは動作しますが、それは前にユーザが選択したものを覚えていません。今私はPage_Loadで何かがなければならないことを知っています。ページがリダイレクトされても、Page_Load getが呼び出されないので、Selection値が表示され、印刷されます。したがって、リダイレクションの問題である必要があります。何らかの理由で、選択した値が設定されていないためです。

+1

のように書くことによって

DropDownList oldvalue = (DropDownList)PreviousPage.FindControl("DropDownList1"); 

てみてくださいを求めたものであるように。サーバー側のボタンがリダイレクトだけであるということには、本当の意味はありません。 –

答えて

1

が、これは、クライアント側のリダイレクトの代わりに、サーバー側を持っているあなたは、この

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     DropDownList ddl = (DropDownList)Page.PreviousPage.FindControl("Your first page drop down id here"); 
     if (ddl!=null) 
     { 
      if(ddl.SelectedValue == "2") 
      // do your coding here 
     } 
    } 
} 
+0

私はこれを取得します:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。私はこのように実装しました:DropDownList oldvalue =(DropDownList)PreviousPage.FindControl( "DropDownList1"); if(oldvalue!= null) { DropDownList1.SelectedIndex = oldvalue.SelectedIndex; } –

+0

あなたはどこにコードを書くことができます。 – Dotnet

+0

私はデバッグとこれを引き起こす行を有効にしました:DropDownList ddl =(DropDownList)Page.PreviousPage.FindControl( "DropDownList1");それは奇妙ではないですか? –

0

私がチェックする最初の事はあなたのリストに追加するどのような項目を決定するためにIsPostBackを使用していることである。

if (!IsPostBack) 
{ 
    DropDownList1.Items.Add(...) 
} 

あなたが安全にそれがGETまたはあるべきかどうかを判断せずにリストを変更した場合POST操作では、リスト項目はリバウンドします(マークアップではなくコードに追加すると仮定します)。ページがPOSTを介してロードされると、コントロールの状態(この場合は追加されたアイテム)が復元され、ロードイベントを処理する前に選択したアイテムなどの変更が適用されます。

リダイレクトを実行すると、リダイレクト対象の新しいGET要求が発行され、リダイレクト対象を処理せずにページがレンダリングされます。 IsPostBackを組み合わせて、GETリクエストでクエリ文字列を処理すると、問題を解決するのに十分なはずです。

+0

DropDownList項目は変更されないので、オプションは静的なので、忘れてしまいました。あなたは私が何をしているのか: "リダイレクトターゲットのために新しいGETリクエストを発行しています。選択を処理せずにページをレンダリングします。" DropDownList1.SelectedValueに従わないのはなぜですか? –

+0

マシューには正しい解決策がありますが、あなたの問題を誤解しています。あなたのPage_Loadハンドラは、Button4_Clickハンドラの前に起動します。つまり、ボタンをクリックすると、クエリー文字列に「選択」値がある場合、それを使用してドロップダウンリストの選択された値を変更してから、クリックハンドラでその値を調べることができます。 !IsPostbackのチェックでPage_Loadにコードをラップする必要があります。これにより、ボタンをクリックしたときにクエリ文字列を無視し、ドロップダウンリストで選択したものを使用します。 – patmortech

+0

答えを編集してddlに新しい項目を追加しようとしていない(削除しようとしていない)項目を削除し、ifブロックにコードを入れると、それは意味があります。 – patmortech

関連する問題