MVC3 RadioButtonFor — как правильно установить checked= «проверено»

#html #asp.net-mvc #vb.net #razor #radio-button

#HTML #asp.net-mvc #vb.net #бритва #переключатель

Вопрос:

Я пытаюсь добиться html, аналогичного следующему, с помощью MVC3 Razor:

 <input id="x1" type="radio" value="true" name="UseExistingNumberX" checked="checked"/>
<input id="x2" type="radio" value="false" name="UseExistingNumberX"  />
  

По какой-то причине я не могу заставить его работать. Когда я попытался выполнить следующее:

 @Html.RadioButtonFor(Function(m) m.UseExistingNumber, "true", New With {.id = "r1", .checked = "checked"}) Use Existing Service
@Html.RadioButtonFor(Function(m) m.UseExistingNumber, "false", New With {.id = "r2"}) Add New Service
  

Я получаю этот вывод html:

 <input type="radio" value="true" name="UseExistingNumber" id="r1" data-val-required="The UseExistingNumber field is required." data-val="true" checked="checked"> Use Existing Service
<input type="radio" value="false" name="UseExistingNumber" id="r2" checked="checked"> Add New Service
  

Это моя модель:

 Public Class SelectiveServiceStep1Model


    <Required(ErrorMessage:="Postcode is required.")> _
    <RegularExpression("^d*[0-9]$", ErrorMessage:="Your Postcode must contain only digits.")> _
    Public Property Postcode As String

    Public Property UseExistingNumber As Boolean

End Class
  

Если вы заметили, что с сгенерированным html есть 2 проблемы:

  1. Я только установил checked=»проверено» на «r1″ в Razor, но по какой-то причине он также установил checked =»проверено» на «r2». Почему?
  2. Я не пометил «UseExistingNumber» в моей модели как «Обязательное» поле, но почему «r1» отображается с атрибутом «data-val-required»?

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

Спасибо

Ответ №1:

  1. Вы получаете атрибут checked, потому что значение модели равно true .
  2. Требуемый флаг применяется, поскольку не подлежащий оплате bool подразумевает, что он является обязательным.

Когда я делал это в прошлом, я использовал HTML.RadioButton вместо RadioButtonFor. обратите внимание, что «поле» — это то, что у вас есть поле. Обычно я бы поместил это в шаблон редактора.

       

               

  • @Html.RadioButton(«field», «True», new { id = (ViewData.TemplateInfo.GetFullHtmlFieldId(«поле») «Да»)}) Да
  •            

  • @Html.RadioButton(«field», «False», new { id = (ViewData.TemplateInfo.GetFullHtmlFieldId(«поле») «Нет»)}) Нет
  •        

@Html.ValidationMessage(«»)

 

Комментарии:

1. 1. Моя модель пуста, поэтому по умолчанию значение равно «False», а не «True». 2. После того, как я изменил значение на логическое? он работает хорошо, т.Е. Больше нет атрибута «data-val-required». Но да, все еще не уверен в вопросе № 1