Ну, это может показаться излишним, но я бы выбрал оба решения. Вам нужен код на стороне сценария javascript, чтобы сделать это правильно с точки зрения представления, и вам также необходим код на стороне сервера для правильной проверки.
Если вы реализуете только проверку на стороне клиента, как будет вести себя система, если браузер не поддерживает javascript или она просто отключена? Вы не можете принимать поддержку JavaScript как должное ...
OTOH, вы бы предложили лучший пользовательский интерфейс, если бы добавили ту функциональность на стороне клиента, о которой вы говорите ...
И о ваших сомнениях в том, как выполнить проверку на стороне сервера: это легко сделать с ASP.NET MVC - при загрузке, просто установите то же свойство ViewData entry / ViewModel, которое вы прочитали во время публикации.
Редактировать Итак, давайте поговорим о полном решении.
Опять же, я не уверен, что понял, что вам нужно здесь. Вы говорите о радиокнопках, но вы также, кажется, думаете, что сможете управлять ими индивидуально (многие радиостанции привязаны ко многим полям). Обычно это не так - группа радиокнопок обычно связана с тем же полем , что и , причем каждая радиокнопка означает другое значение (так же, как один выпадающий список). Конечно, это не означает, что ваша база данных должна вести себя так же ...
См. Этот пример:
<% using(Html.BeginForm("HandleForm", "Home")) { %>
Select your favorite color:<br />
<%= Html.RadioButton("favColor", "Blue", true, new { id = "rbColorBlue", class = "favColor" }) %> Blue <br />
<%= Html.RadioButton("favColor", "Purple", false, new { id = "rbColorPurple", class = "favColor" })%> Purple <br />
<%= Html.RadioButton("favColor", "Red", false, new { id = "rbColorRed", class = "favColor" })%> Red <br />
<%= Html.RadioButton("favColor", "Orange", false, new { id = "rbColorOrange", class = "favColor" })%> Orange <br />
<%= Html.RadioButton("favColor", "Yellow", false, new { id = "rbColorYellow", class = "favColor" })%> Yellow <br />
<%= Html.RadioButton("favColor", "Brown", false, new { id = "rbColorBrown", class = "favColor" })%> Brown <br />
<%= Html.RadioButton("favColor", "Green", false, new { id = "rbColorGreen", class = "favColor" })%> Green
<%= Html.RadioButton("favColor", "Other", false, new { id = "rbColorOther", class = "favColor" })%> Other
<div id="divOtherColorText" style="display: block">
Describe the color you want here:<br />
<%=Html.TextArea("otherColorText", new { id = "taOtherColor" }) %><br />
</div>
<% } %>
Это будет привязано к одному параметру контроллера, favColor
, со значением по умолчанию "Blue". Обратите внимание, что для удобства мы назначаем отдельный идентификатор на стороне клиента для каждой радиопереключателя (rbColorBlue
, rbColorGreen
и т. Д.). Это означает, что вы сможете обрабатывать каждую радиокнопку индивидуально в своем коде jQuery, даже если они представляют одно значение для контроллера на стороне сервера.
Говоря о коде на стороне сервера, вот как будет выглядеть действие:
public class HomeController : Controller
{
public ActionResult HandleForm(string favColor, string otherColorText)
{
// Add action logic here
// If you want to have a separated field for your database,
// just do something like that:
MyDbFacade.BlueColorField = (favColor == "Blue");
MyDbFacade.GreenColorField = (favColor == "Green");
...
return View();
}
}
(Конечно, вы также можете работать с ViewModel, но я не буду говорить об этом варианте здесь.)
Вернуться на сторону клиента. Предположим, вы не хотите показывать taOtherColor
, если пользователь не выберет радиокнопку rbColorOther
. Код jQuery будет выглядеть примерно так:
$(document).ready(function() {
// If user selects any radiobutton:
if ( $('#rbColorOther:checked').length > 0) {
$("#divOtherColorText").show();
} else {
$("#divOtherColorText").hide();
}
});
Полагаю, так оно и было. Дайте мне знать, если я что-то пропустил ...: -)