метод не назначит значение для indexinx правильно, asp.net radiobuttonlist - PullRequest
2 голосов
/ 23 января 2011

У меня есть страница с radiobuttonlist и текстовой областью. данные отображаются динамически в текстовой области на основе выбора пользователя. я также настроил 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. по какой-то причине это неправильно назначает индекс выбора.

Случай 2 , когда я выбираю переключатель на веб-странице, которую я запустил, он пропускает код page_load, потому что обратная связь верна . затем создает URL-адрес в RadioButtonList1_SelectedIndexChanged. затем проходит через метод загрузки на странице и в конце содержит правильное значение RadioButtonList1.SelectedIndex.

Случай 3 , когда я выбираю ссылку на запущенной веб-странице, которая использует указатель на http://test.com/test.aspx?selected=2, обратная передача имеет значение 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);

    }


}

Ответы [ 2 ]

9 голосов
/ 25 января 2011

Вам нужно отменить вызовы, чтобы сначала включить данные в список радиобутон, ТО затем установить выбранный индекс.

Например, вы можете изменить структуру следующим образом. Если вам нужно привязать данные, вы можете поместить их там, где у меня есть комментарий.

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 голосов
/ 01 февраля 2011

Мой параметр сеанса не принимает правильное значение на SqlDataSource1_Selecting. я удалил код и жестко запрограммировал параметр сеанса в aspx, чтобы заставить мой код работать правильно. спасибо за вклад каждого! я рад, что это закончилось.

...