2015-12-17 2 views
0

Я работаю с группой RadioButton в ASP.NET, MVC, Razor и пытаюсь динамически установить выбранную кнопку в радиогруппе на основе ранее выбранной опции. Здесь уместна фрагмент кода:Невозможно отобразить выбранную кнопку MVC Radio

List<Product> productList = ViewBag.ProductList; 
    if (productList != null && productList.Count > 0) 
    { 
     foreach (Product product in productList) 
     { 
      <tr> 
       <td> 
        @Html.RadioButtonFor(p => p.ProductIdString, productList[i].Id, new { Checked = @ViewBag.ProductSelected==product.Id ? true: false, onclick="this.form.submit();", tabindex = @tab }) 
        @{tab++;} 
        @{i++;} 
         <td>@product.Name</td> 
         <td>@product.Description</td> 
         <td>@product.FormattedPrice</td> 
      </tr> 
     } 
} 

Во время первого размещения страницы, все работает, как ожидалось. Сохраненный productId правильно устанавливает этот параметр. Однако, если новый вариант будет выбран после начальной загрузки, то выбранная кнопка Checked и проверила свойство и атрибуты будут установлены правильно, как показаны на рисунке, но ранее выбранная кнопка будет помечена как проверенная на форме:

<td> 
    <input Checked="True" checked="checked" data-val="true" data-val-required="Please select a product" id="ProductIdString" name="ProductIdString" onclick="this.form.submit();" tabindex="30" type="radio" value="1" /> 
</td> 

Я прочитал несколько сообщений, в которых указано, что проверенные/проверенные атрибуты/свойства предназначены для выбора по умолчанию, и как только он установлен, кажется, что это невозможно изменить? Это верно? Если нет, как вы динамически устанавливаете выбранный переключатель?

Только одно примечание, когда форма передается контроллеру, объект Request имеет правильно выбранное значение, но он просто не отображается как выбранный.

Я в затруднении здесь и буду благодарен за любые предложения.

ответ

0

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

Чтобы изменить значение радиостанции, вам понадобится javascript или упростить jQuery. Посмотрите на этом arcticles:

https://api.jquery.com/change/

https://learn.jquery.com/using-jquery-core/faq/how-do-i-check-uncheck-a-checkbox-input-or-radio-button/

0

Проблема с кодом является то, что он не обрабатывает HTML-атрибут «проверил» в правильном направлении.

Проверенный атрибут является логическим атрибутом! Если атрибут присутствует, независимо от его содержимого (true, false, checked, foobar), тогда проверяется радиообъект.

Потому что это очень трудно иметь дополнительный HTML-атрибут в элементах Razor, я использую этот трюк:

@Html.RadioButtonFor(p => p.ProductIdString, productList[i].Id, 
Dictionary<string, object>() { 
    {"checked" + (@ViewBag.ProductSelected==product.Id ? "": "not"), ""}, 
    {"onclick", "this.form.submit();"}, 
    {"tabindex", @tab} 
}) 

Таким образом RadioButton элементы имеют checkednot атрибут, когда они не выбраны, и checked, когда они находятся. Браузер просто игнорирует выбранные атрибуты, а проверяется только один элемент.

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