формат для URL-адреса, указывающего на выбор переключателя

Возможный дубликат:
ссылка к выбору переключателя, asp.net c#

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

я надеюсь, что все, что мне нужно сделать, это изменить строку запроса, чтобы включить значение переключателя. вот данные, полученные fidler, когда я выбираю переключатель.

 __EVENTTARGET  ctl00$MainContent$RadioButtonList1$6
__EVENTARGUMENT 
__LASTFOCUS 
__VIEWSTATE /+++PC9wPg0KPHA+/....
__EVENTVALIDATION   /wEWCwKY7d6oAQLh8vmTCALk7M7lDQK+6NunDwK/6OenDwK86OenDwK86OunDwK86POnDwK96NenDwK96NunDwKxh73KA3Q+PMuKU/JUCKsF1aiY2DNLu7/pFFni/Qtz+7FXy35g
ctl00$MainContent$RadioButtonList1  41

я надеюсь, что мой URL-адрес просто должен выглядеть примерно так, чтобы указывать на значение переключателя, но все, что мне нужно, это соответствующий синтаксис:

http://www.test.com/test.aspx?ctl00$MainContent$RadioButtonList1$41

--- код позади ---

protected void Page_Load(object sender, EventArgs e)
    {


        if (Page.IsPostBack == false)
        {


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

        }

        else
        {

            string strRedirect;

            strRedirect = "frm_Articles.aspx?Article_PK=" + RadioButtonList1.SelectedValue.ToString();

            Response.Redirect(strRedirect);


        }
    }  



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

     }


    }



}

person MG.    schedule 20.01.2011    source источник
comment
У меня возник вопрос... как ваша страница в настоящее время меняет текст в зависимости от переключателя? Приведенный выше код, кажется, предполагает, что при обратной передаче он выполняет перенаправление, заставляя меня думать, что либо а) вы делаете это на стороне клиента, либо б) что страница, на которую вы перенаправляете, является той, на которую вы хотите получить значение, а не тест. аспкс. Действительно ли test.com/frm_Articles.aspx?Article_PK=41 делает то, что вы хотеть?   -  person Chris    schedule 20.01.2011
comment
Я получаю психическую вибрацию от вашего вопроса. Там написано... Спросите своих детей, какие три самые лучшие вещи произошли сегодня?   -  person    schedule 20.01.2011


Ответы (1)


Следует отметить, что вы неправильно создали свой URL. Должен быть:

http://www.test.com/test.aspx?ctl00$MainContent$RadioButtonList1=41

(обратите внимание, что предпоследний символ — это =.

Кроме того, это будет зависеть от того, как ваша страница работает с точки зрения выбора выбранного переключателя. Мой совет: просто попробуйте и посмотрите, что получится. Однако я подозреваю, что если вы делаете это на основе события, генерируемого при загрузке страницы (т.е. какого-то поведения обратной передачи), то это не сработает.

Если это так, то вам просто нужно что-то сделать при загрузке страницы, чтобы проверить, существует ли это значение в URL-адресе, и установить его перед загрузкой текста. Если вы в конечном итоге пойдете по этому пути, вы можете рассмотреть возможность использования более четко определенного и удобного для пользователя параметра строки запроса. В частности, идентификатор, который у вас есть, создается на основе его положения в иерархии элементов управления. Если бы вы изменили структуру HTML, идентификатор вполне мог бы измениться.

Дополнительно...

С кодом, который вы предоставили, где вы установили selectedindex вашего списка переключателей, вам нужно выяснить, какое значение вам нужно, прежде чем вы его установите, и установите его на 0, если у вас нет лучшего значения (хотя похоже, что вы устанавливаете на 0 перед связыванием, которое кажется излишним). Что-то вроде этого может работать (не скомпилировано и не протестировано, поэтому извиняюсь за опечатки - оно предназначено для того, чтобы дать вам общее представление, а не для окончательного кода).

if (Page.IsPostBack == false)
{
    RadioButtonList1.DataBind();
    //Check if you have a value to set.
    if (Request.Querystring(RadioButtonList1.ClientID)!=null)
    {
        //Get the value
        string setValue = Request.Querystring(RadioButtonList1.ClientID)
        //Find the right radio option to select
        foreach(ListItem item in RadioButtonList1.Items)
        {
            if (item.Value == setValue)
            {
                item.Selected = true;
                break;
            }
        }
    }

}

Я предполагаю, что по умолчанию выбранный индекс будет равен 0, если в противном случае ничего не выбрано.

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

person Chris    schedule 20.01.2011
comment
благодаря. URL-адрес не дал мне результатов, которые я искал:/ - person MG.; 20.01.2011
comment
Я предполагаю, что вам нужно будет добавить немного кода на сервер, чтобы проверить при первой загрузке (т.е. не обратной передаче), есть ли у вас что-то в URL-адресе, и предпринять соответствующие действия. - person Chris; 20.01.2011
comment
как настроить чек? я разместил свой текущий код позади. Спасибо. - person MG.; 20.01.2011
comment
@MG: отредактировал мой ответ, добавив несколько комментариев по этому поводу. - person Chris; 20.01.2011
comment
item.Value и item.Selected выдают ошибки. «объект» не содержит определения. - person MG.; 20.01.2011
comment
Я предполагаю, что он не выбрал правильный тип объекта. Я только что отредактировал его, чтобы не использовать var (мне было лень и я не искал точный тип объекта). Если мое редактирование по-прежнему не работает, просто посмотрите, какой тип объекта вы ожидаете (или используйте отладчик, чтобы увидеть) и проверьте его таким образом. Актерский состав, вероятно, тоже не помешал бы. - person Chris; 20.01.2011
comment
хорошо, я получил его для запуска. так должен ли я использовать указанный выше URL-адрес и передать значение радиокнопки на страницу при загрузке страницы? - person MG.; 20.01.2011
comment
Я так считаю. Поставьте точку останова в начале моего нового кода и посмотрите, что произойдет. Он должен найти значение в URL-адресе, установить тот, который вы выбрали для setValue, а затем прокрутить все радиокнопки в поисках того, который вы просили. Если это не так, то поиск в отладчике должен помочь вам понять, почему нет. - person Chris; 20.01.2011
comment
все еще не удается передать значение для установки переключателя при загрузке страницы: http://www.test.com/test.aspx?ctl00$MainContent$RadioButtonList1=41 ... разочарование ... снова отладка .. - person MG.; 20.01.2011
comment
если я вставлю всю строку после URL-адреса, она укажет на правильный переключатель. __EVENTTARGET=ctl00%24MainContent%24RadioButtonList1%242&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE=%%2ByiD%2Ff2wmeKTuUwe9Ing%3D%3D&__EVENTVALIDATION=%2FwEWCQKVn9%....2BLYkev3csEzPfS6PI4lPJbP&ctl00%24MainContent%24RadioButtonList1=14 это можно как-то сократить? - person MG.; 20.01.2011
comment
Какова логика, когда вы пытаетесь использовать этот сокращенный URL-адрес? Он вообще принимает это значение? не удается установить переключатель? Делает ли он что-то еще? Вы должны дать мне немного больше, чем это не сработает, или я буду полагаться на свои слабые экстрасенсорные способности, чтобы попытаться понять, где вы ошибаетесь. - person Chris; 20.01.2011