2

ラジオボタンリストとテキストエリアのあるページがあります。データは、ユーザーの選択に基づいてテキストエリア内に動的に表示されます。また、OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" を設定して、ユーザーが記事を参照できるようにする URL を作成します (ラジオ ボタンの選択)。

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

だから、ここに私がデバッグモードで見ているものがあります

ケース 1 URL をカット アンド ペーストして新しいブラウザhttp://test.com/test.aspx?selected=1に貼り付けると、page_load メソッド コード RadioButtonList1.SelectedIndex の最後で = -1 になります。何らかの理由で、selectindex が正しく割り当てられていません。

ケース 2起動した Web ページ内でラジオ ボタンを選択すると、 post back が true であるため、page_load コードがスキップされます。次に、RadioButtonList1_SelectedIndexChanged 内に URL を作成します。次に、ページ読み込みメソッドを実行し、最後に正しい RadioButtonList1.SelectedIndex 値を保持します。

ケース 3 http://test.com/test.aspx?selected=2 を指すことを使用している、起動された Web ページ内のリンクを選択すると、ポストバックが false になるため、page_load コードをループし、正しい RadioButtonList1.SelectedIndex を正常に保持します。最後に値。

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);

    }


}
4

2 に答える 2

9

最初にradiobuttonlistをデータバインドするための呼び出しを逆にしてから、選択したインデックスを設定する必要があります。

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

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」を渡すと、上記のコードで例外が発生します。

于 2011-01-25T18:55:08.150 に答える
0

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

于 2011-02-01T17:18:02.800 に答える