#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 проблемы:
- Я только установил checked=»проверено» на «r1″ в Razor, но по какой-то причине он также установил checked =»проверено» на «r2». Почему?
- Я не пометил «UseExistingNumber» в моей модели как «Обязательное» поле, но почему «r1» отображается с атрибутом «data-val-required»?
Примечание: я знаю, что я могу писать html непосредственно в Razor, и я также знаю, что я могу написать свои собственные расширения для отображения html, который я хочу. Я просто не могу поверить, что я уже не могу использовать встроенный, наверняка я что-то упускаю, верно?
Спасибо
Ответ №1:
- Вы получаете атрибут checked, потому что значение модели равно true .
- Требуемый флаг применяется, поскольку не подлежащий оплате 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