2012-02-24 2 views
0

Мой html.asp post back issue и html control

<input id="rdb1" type="radio" name="rdbData" checked="checked" /> 
<input id="rdb2" type="radio" name="rdbData" /> 
<asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" /> 

Кнопка только asp:buttonradio buttons но это not.First время, когда страница rdb1 нагрузка selected.But, когда я нажимаю кнопку btnTest с проверкой rdb2, страница обновляется и выберите 1-й redio button.To предотвратить это, я попробуйте jquery вот так. Внутри Document.ready:

var btnTest = "<%=btnTest.ClientID %>"; 
$('#' + btnTest).bind("click", function() { 
      if ($('#rdb1').attr("checked")) { 
       $('#rdb2').attr("checked", false); 
       $('#rdb1').attr("checked", true); 

      } 
      else { 
       $('#rdb1').attr("checked", false); 
       $('#rdb2').attr("checked", true); 
      } 
     }); 

Но его не work.How мы можем справиться с этим типом situation.Where я получаю wrong.Any идею или любые alternative.Thanks.

+0

Попробуйте 'e.preventDefault' на' bind() 'event – elclanrs

ответ

0

Повторяю, что требование ABSURD. Как они собираются рассказать вам, что вы использовали серверные элементы управления, не смотря на код в любом случае. Это похоже на то, что вы пишете код, используя палочки для еды или что-то в этом роде.

Однако только в качестве упражнения я обеспечиваю следующее решение:

<input id="rdb1" type="radio" name="rbdData" value="rbd1" <%= Rdb1Checked %> /> 
<input id="rdb2" type="radio" name="rbdData" value="rbd2" <%= Rdb2Checked %> /> 
<asp:Button ID="btnTest" runat="server" Text="Test" onclick="btnTest_Click" /> 

И код позади:

protected string Rdb1Checked 
{ 
    get 
    { 
     if (IsPostBack) 
     { 
      if (Request["rbdData"] == "rbd1") 
      { 
       return "checked"; 
      } 
      else 
      { 
       return ""; 
      } 
     } 

     return "checked"; 
    } 
} 

protected string Rdb2Checked 
{ 
    get 
    { 
     if (IsPostBack) 
     { 
      if (Request["rbdData"] == "rbd2") 
      { 
       return "checked"; 
      } 
      else 
      { 
       return ""; 
      } 
     } 

     return ""; 
    } 
} 

спросить, почему они эти требования. Возможно, они не хотят видеть идентификаторы клиентов, и в этом случае вы можете установить ClientIDMode в Static и избежать автоматического создания идентификаторов. Вы можете полностью удалить их, установив их в null и т. Д. Может быть, им не нравится то, что Web Forms отображает для радио-кнопок, и в этом случае использование серверных входов будет в порядке. Требование само по себе просто не имеет смысла.

0

Shree

Дело в том, что клиент мыши (добавлен JQuery) выполняется до вызова сервера. Если вы хотите сохранить селектин, попробуйте использовать серверные элементы управления:

<input id="rdb1" type="radio" name="rdbData" checked="true" runat="server" /> 
    <input id="rdb2" type="radio" name="rdbData" runat="server" /> 
    <asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" /> 

Попробуйте, если это сработает для вас.

Надеюсь, это поможет.

+0

Я не могу использовать' server side' control.Its мой запрос на проект. Это проблема с образцом, с которой я сталкиваюсь. –

0

Когда нажата кнопка «Тест», страница возвращается на сервер, которая повторно отображает все элементы управления на стороне клиента так же, как если бы страница была загружена в первый раз. Поскольку вся страница перезагружается, jQuery также «забудет» о состоянии элементов управления, так что подход не будет работать. Самый простой способ предотвратить это - обеспечить запуск радиокнопки на стороне сервера. Например:

<asp:RadioButton id="rdb1" Checked="True" GroupName="RadioGroup1" runat="server" /> 
<asp:RadioButton id="rdb2" GroupName="RadioGroup1" runat="server" /> 

Надеюсь, что это поможет!

+0

Я не могу использовать 'server side' control.Its мой запрос на проект. Это проблема, с которой я сталкиваюсь. –

+0

Ну, Button - это серверный контроль, и вы используете его. – Stilgar

+0

Проект Yap большой и его проект требует. Я не могу опубликовать все здесь. Это условие. Так что я уже упоминал, что эта кнопка является серверной. –

1

Если это запрос, я бы предположил, что у вас есть скрытое поле (серверная сторона), в котором будет сохранено состояние выбранного переключателя ввода (используйте jquery для обновления скрытого поля, когда пользователь нажимает на переключатели). Затем при обратной передаче, когда скрытое поле установлено в runat = "server", оно будет поддерживать свое значение (viewstate), и вы можете просто использовать jquery для установки правой переключателя в качестве выбранного. Имеет ли это смысл ?

-1

Что вы имеете в виду? У вас есть требование, которое не позволяет использовать «сервоуправление» или что ваша среда ID не позволяет это?

По определению, в ASP.NET все элементы управления HTML наследуются от серверного элемента управления.Просто добавив runat = "server", вы можете получить доступ к этому элементу управления из кода, хотя он все равно будет отображаться на странице как обычный элемент управления HTML.