2011-01-23 3 views
2

私はradiobuttonlistとtextareaを持つページを持っています。データは、ユーザの選択に基づいてテキストエリア内に動的に表示される。私はまた、OnSelectedIndexChanged = "RadioButtonList1_SelectedIndexChanged"を設定して、ユーザが自分の記事(ラジオボタン選択)を参照できるようにするURLを作成します。メソッドはselectindexに値を正しく割り当てません。asp.net radiobuttonlist

作成したURL(つまりhttp://test.com/test.aspx?selected=3)をカットして新しいブラウザに貼り付ける以外はすべて機能します。コードはradiobuttonlist1.selectedindexを-1に割り当て続けます。ので、ここで

は私がデバッグモードで

ケース1私は新しいブラウザhttp://test.com/test.aspx?selected=1にカットし、URLを過ぎたときに、Page_LoadメソッドのコードRadioButtonList1.SelectedIndexの終わりに等しいを見てんですよ= -1となる。何らかの理由で 'selectindexを正しく割り当てていません。

ケース2私が立ち上げたウェブページ内でラジオボタンを選択したときにポストバックが真あるので、それはPage_Loadのコードをスキップします。次に、RadioButtonList1_SelectedIndexChanged内にURLを作成します。ページ上のロードメソッドを実行し、最後に正しいRadioButtonList1.SelectedIndex値を保持します。私は、Webページ内のリンクは、それがhttp://test.com/test.aspx?selected=2を指して使用されて打ち上げ選択した場合には、Page_Loadコードと、正常に終了時に正しいRadioButtonList1.SelectedIndex値を保持するものの、それがループして

ケース3は、ポストバックはfalseです。

protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
       { 

       int selected; 

       if (Request.QueryString["selected"] != null) 
       { 

        if (int.TryParse(Request.QueryString["selected"], out selected)) 
        { 


         RadioButtonList1.SelectedIndex = selected; 
         RadioButtonList1.DataBind(); 

        } 


       } 
       else 
       { 

        int firstart = 0;  

        RadioButtonList1.SelectedIndex = firstart; 


       } 

      } 



     } 



    protected void SqlDataSource2_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
    { 



    } 
    protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
    { 
     try{ 
     e.Command.Parameters["@URL_FK"].Value = Session["URL_PK"]; 


     } 
    catch (Exception ex) 
    { 

    } 


    } 


    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 


      string strRedirect; 
      strRedirect = "test.aspx?selected=" + RadioButtonList1.SelectedIndex; 
      Response.Redirect(strRedirect); 

    } 


} 
+0

この動作で簡素化されたASP .NETプロジェクトを公開できますか? –

答えて

0

セッションパラメータがSqlDataSource1_Selectingで正しい値を取得していませんでした。私はコードを削除し、コードを正しく動作させるためにaspxのセッションパラメータをハードコードしました。みんなに感謝します!私はこれが終わってうれしいです。

9

最初にラジオボタンリストをバインドするための呼び出しを取り消し、次に選択したインデックスを設定する必要があります。

たとえば、次のように再構成できます。データをバインドする必要がある場合は、コメントがある場所に置くことができます。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //Always bind the list to here, if needed 

     if (Request.QueryString["selected"] != null) 
     { 
      int selected; 
      if (int.TryParse(Request.QueryString["selected"], out selected)) 
      { 
       RadioButtonList1.SelectedIndex = selected; 

      } 
     } 
    } 
} 

注:ユーザーはあなたが上記のコードで例外が発生しますデータ、次に大きい「のselectedIndexを」通過すれば私は強く、少しこれをさらにクリーンアップをお勧めします。

+0

これは役に立ちませんでした。 –

+0

@MGこの回答は正しいと思われる - SelectedIndexを設定した後のバインドSelectedIndexをリセットします。 "RadioButtonList1.SelectedIndex = selected;"という行にブレークポイントがあり、ラジオボタンリストのItemsプロパティを参照して、コレクションに何かが含まれていますか? –

+0

@MGこれはかなり役に立ちます。 'RadioButtonList1.DataBind(); 'RadioButtonList1.DataBind();'選択されたインデックスを設定すると、リストに項目がないので、 'RadioButtonList1.DataBind();' RadioButtonList1.SelectedIndex = selected;アイテムがリストにあり、正しく選択されます。 –

関連する問題