好吧,这听起来可能有点矫枉过正,但我会选择 both 解决方案。从演示的角度来看,您需要 javascript 脚本端代码才能正确执行此操作 - 而且您也需要服务器端代码才能正确执行验证。
如果您只实现客户端验证,如果浏览器不支持 javascript,或者如果它只是被禁用,系统将如何运行?你不能认为对 javascript 的支持是理所当然的......
OTOH,如果您添加了您正在谈论的客户端功能,您将提供最佳用户体验...
关于您对如何进行服务器端验证的疑问:使用 ASP.NET MVC 很容易 - 在加载时,只需设置您在发布期间阅读的相同 ViewData 条目/ViewModel 属性。
编辑所以我们来谈谈一个完整的解决方案。
同样,我不确定我是否了解您在这里需要什么。您在谈论单选按钮,但您似乎也认为您可以单独控制它们(许多收音机绑定到许多字段)。通常情况并非如此 - 一组单选按钮通常绑定到 same 字段,每个单选按钮表示不同的值(与单个下拉列表完全一样)。当然,这不意味着您的数据库必须以相同的方式运行...
看这个例子:
<% 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 等)分配了不同的客户端 ID。这意味着您将能够在 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();
}
});
我想就是这样。如果我遗漏了什么,请告诉我... :-)