2013-02-19 3 views
0

Получил этот HTML из приложения ASP.Net MVC3 (C#):Радиокнопка в радио-группы не рендеринга проверяется при проверке = "проверено"

<div class="row-fluid"> 
    <div class="span4"> 
     <label for="MailPrefBusi">Business Street</label> 
     <input type="radio" checked="checked" class="validate[groupRequired[MailingPreference]] MailingPreference" 
      parent_tab="tab4" id="MailPrefBusi" name="MailingPreference" value="1"> 
    </div> 
    <div class="span4"> 
     <label for="MailPrefBusiPO">Business PO</label> 
     <input type="radio" class="validate[groupRequired[MailingPreference]] MailingPreference" 
      parent_tab="tab4" id="MailPrefBusiPO" name="MailingPreference" value="0" disabled="disabled"> 
    </div> 
    <div class="span4"> 
     <label for="MailPrefHome">Home</label> 
     <input type="radio" class="validate[groupRequired[MailingPreference]] MailingPreference" 
      parent_tab="tab4" id="MailPrefHome" name="MailingPreference" value="2"> 
    </div> 
</div> 

Но при просмотре в браузере, FF, IE9, IE8 и Chrome , радио MailPrefBusi НЕ ВЫПОЛНИТСЯ.

Вот код, который генерирует HTML:

<div class="row-fluid"> 
    @{ 
     String busipref = ""; 
     String popref = ""; 
     String homepref = ""; 
     switch (ViewBag.part.MailingPreference) 
     { 
      case 1: 
       busipref = "checked=\"checked\""; 
       break; 
      case 0: 
       popref = "checked=\"checked\""; 
       break; 
      case 2: 
       homepref = "checked=\"checked\""; 
       break; 
     } 
    } 
    <div class="span4"> 
     <label for="MailPrefBusi">Business Street</label> 
     <input type="radio" value="1" name="MailingPreference" id="MailPrefBusi" 
       parent_tab="tab4" class="validate[groupRequired[MailingPreference]] MailingPreference" @Html.Raw(busipref) /> 
    </div> 
    <div class="span4"> 
     <label for="MailPrefBusiPO">Business PO</label> 
     <input type="radio" value="0" name="MailingPreference" id="MailPrefBusiPO" 
       parent_tab="tab4" class="validate[groupRequired[MailingPreference]] MailingPreference" @Html.Raw(popref) /> 
    </div> 
    <div class="span4"> 
     <label for="MailPrefHome">Home</label> 
     <input type="radio" value="2" name="MailingPreference" id="MailPrefHome" 
       parent_tab="tab4" class="validate[groupRequired[MailingPreference]] MailingPreference" @Html.Raw(homepref) /> 
    </div> 
</div> 

также этот JQuery код:

if ($("#BusinessAddress1").val() == "") { 
    $("#MailPrefBusi").attr('checked', false); 
    $("#MailPrefBusi").attr('disabled', true); 
} else { 
    $("#MailPrefBusi").attr('disabled', false); 
    if ($("#MailPrefBusi").attr('checked')) { 
     $("#MailPrefBusi").attr('checked', 'checked'); 
    } 
} 
if ($("#HomeAddress1").val() == "") { 
    $("#MailPrefHome").attr('checked', false); 
    $("#MailPrefHome").attr('disabled', true); 
} else { 
    $("#MailPrefHome").attr('disabled', false); 
    if ($("#MailPrefHome").attr('checked')) { 
     $("#MailPrefHome").attr('checked', 'checked'); 
    } 
} 
if ($("#POAddress1").val() == "") { 
    $("#MailPrefBusiPO").attr('checked', false); 
    $("#MailPrefBusiPO").attr('disabled', true); 
} else { 
    $("#MailPrefBusiPO").attr('disabled', false); 
    if ($("#MailPrefBusiPO").attr('checked')) { 
     $("#MailPrefBusiPO").attr('checked', 'checked'); 
    } 
} 

Но до сих пор он не показывает проверил. Это очень важная часть этой формы, и эта радиогруппа ДОЛЖНА иметь хотя бы один элемент, проверенный. Если пользователь не видит, что он проверен, я не уверен, что значение отправляется правильно, либо потому, что у нас были экземпляры, в которых изменение MailingPreference пользователя было изменено до значения, имеющего пустой адрес, и ничего хорошего!

Проверка выполняется с помощью jQuery ValidationEngine.

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

+1

Используйте JQuery .prop() для этого вместо .attr(): HTTP://api.jquery.com/prop/ –

+0

По-прежнему не думайте, что это будет иметь значение. – MB34

+1

@Hanlet Escañ0 - Изменен для использования .prop(), и он сработал., Спасибо. – MB34

ответ

1

У меня была аналогичная проблема не так давно. В основном то, что я закончил с было поставить инициализации списка радиокнопки на стороне клиента, и это выглядело примерно так: функция

$(function() { 
    $('input[name=MailingPreference]:eq('[email protected](ViewBag.part.MailingPreference)+')').attr('checked', 'checked'); 
}); 
+0

Я принял это, но он не выбирает правильное радио с VALUE = ViewBag.part.MailingPreference; Он выбирает только FIRST (индекс) группы. – MB34

+0

Это действительно сработало: '$ ('input [name = MailingPreference]'). Filter (function() {return $ (this) .val() == @ (ViewBag.part.MailingPreference);})' – MB34

+0

Добавил это чтобы выбрать пол на основе значения ViewBag: '$ ('select [name = Gender] option'). filter (function() {return $ (this) .val() == @ (ViewBag.part.Gender) ;}). prop ('selected', true); 'Эта функция filter() крутая. – MB34