嗯,这听起来可能矫枉过正,但我会用b移动到其他解决方案。您需要JavaScript脚本代码才能从演示的角度来完成它 - 而且您还需要服务器端代码来执行验证。
如果您只实现客户端验证,如果浏览器不支持JavaScript,或者只是被禁用,系统将如何运行?你不能把JavaScript的支持是理所当然的......
OTOH,你会提供最佳的用户体验,如果你补充说,客户端功能你在谈论...
以及您的疑问如何进行服务器端验证:使用ASP.NET MVC很容易 - 在加载时,只需设置您在发布期间阅读的相同ViewData条目/ 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
,具有缺省值“蓝色”。看到这一点,为了方便起见,我们为每个单选按钮分配一个不同的客户端ID(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();
}
});
我想那就是它。让我知道如果我错过了什么...... :-)
我真的无法理解,因为你几乎没有使用任何标点符号,如果你能修正它,看看我的意思是什么会更好。 – rsenna 2011-01-25 15:06:41
@rsenna我所能做的只是空间出来,所以我希望这是更好的 – Myzifer 2011-01-25 15:14:31
@rsenna:所以任何想法或解决方案? – Myzifer 2011-01-26 10:18:54