2010-05-04 3 views
3

У меня есть страница ASP.NET с двумя переключателями. Кнопки используют авто-обратную передачу для выполнения логики на стороне сервера. Если вы выберете вторую кнопку, страница вернется и правильно отобразит сообщение о том, что выбрана вторая кнопка. Если щелкнуть кнопку назад браузера, состояние кнопки 2 будет проверено, пока сообщение вернется к утверждению, что указанная кнопка отмечена. Это приводит к ситуации, которая явно нежелательна, поскольку состояние переключателей и сообщений теперь не синхронизировано. Я знаю, что это проблема кэширования, но мне кажется странным, что браузер запоминает предыдущее состояние метки, но не предыдущее состояние переключателя.Состояние кнопки состояния радиостанции ASP.NET

Каков наилучший способ справиться с этой ситуацией? В этой ситуации нежелательно отключать кеш или использовать кнопку «Назад».

Следующий пример кода демонстрирует такое поведение:

[Форма:]

<asp:RadioButton ID="rb1" runat="server" AutoPostBack="true" Text="Button1" OnCheckedChanged="rb_CheckedChanged" 
     GroupName="rbgroup" Checked="true" /> 
    <br /> 
    <asp:RadioButton ID="rb2" runat="server" AutoPostBack="true" Text="Button2" OnCheckedChanged="rb_CheckedChanged" 
     GroupName="rbgroup" /> 
    <br /> 
    <hr /> 
    <asp:Label ID="lbl1" runat="server">Button 1</asp:Label> 

[Код Behind:]

protected void rb_CheckedChanged(object sender, EventArgs e) 
{ 
    if (rb1.Checked == true) 
     lbl1.Text = "Button 1"; 
    else 
     lbl1.Text = "Button 2"; 
} 

ответ

0

Хмм - это смешно.

Я могу воспроизвести это. И меня удивляет то, что источник (просмотр источника браузера) показывает правильную радиокнопку (кнопка 1). Браузер (я тестировал IE и FF), похоже, не правильно отображает источник (или не перерисовывает радиокнопку или не показывает правильный источник).

Теперь вещь с обратной кнопкой немного сложна. В основном потому, что вы мало что можете сделать с этим ... HTTP есть и останется без гражданства, а кнопка «Назад» на клиенте «далека» от вашего веб-сервера. Вы не можете контролировать это.

В качестве ссылки на статью вы можете прочитать A Thorough Examination of "Disabling the Back Button".

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

Единственное, что я могу сейчас подумать, это найти какой-то умный JavaScript, который я не могу обеспечить, чтобы «сделать что-то», чтобы браузер перерисовал экран после того, как пользователь нажал кнопку «Назад».

1

WYour вопрос очень простой.

  1. В разметке вы можете использовать проверенный = «ложный» или любой другой эквивалент asp.net ....

  2. На странице загрузки убедитесь, что вы используете, если (! IsPostBack) {//установите значение вашей группы. }, чтобы установить значения переключателя из источника данных или значений по умолчанию при первой загрузке страницы. Каждое последующее время будет исключено.

Так вот пример:

if(!IsPostBack) 
{ 
    rb1.Checked = false; 
    rb2.Checked = false; 

    //or alternatively set the value from server data 
} 
  1. В случае нажатия кнопки назад браузер уже кэшированные страницы.Поскольку ни один из флажков не отмечен как checked = «false» в вашей разметке или в вашем коде, браузер загрузит состояние страницы, как оно есть, из кеша.

Если вы хотите изменить переключатель, используйте # 2, чтобы установить значение группы, поскольку событие PageLoad выполняется перед предварительным рендерингом и рендерингом.

Смежные вопросы