在ASP.NET MVC视图中,我有几个复选框,一个用于电子邮件地址,一个用于电话。我想确保至少检查一个(两者都可以检查,因此单选按钮不理想),如果两者都没有,突出显示红色边框的行就像文本框一样具有验证功能... < / p>
我还有其他正确验证的字段,当文本框和textareas出现问题时,CSS正在发生变化。下面的代码显示的消息告知用户他们必须指定联系人首选项,但不会将该行突出显示为有问题...
查看
<table width="100%">
<tr>
<td>
<label>
How would you like us to contact you?
</label>
</td>
</tr>
<tr id="pref_row">
<td>
<span class="bold-text">Email: </span>
<%=Html.CheckBox("EmailDesired")%>
<span class="bold-text">Phone: </span>
<%=Html.CheckBox("PhoneDesired")%>
</td>
</tr>
</table>
CONTROLLER
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(ContactUs contactus)
{
ContactUsService svc = new ContactUsService();
// Validation
if (!contactus.EmailDesired && !contactus.PhoneDesired)
ViewData.ModelState.AddModelError("pref_row", "Please specify a contact preference (phone and/or email)!");
if (ViewData.ModelState.IsValid)
{
MessageModel msg = svc.SendRequest(contactus);
return RedirectToAction("Index", msg);
}
else
{
return View();
}
}
答案 0 :(得分:4)
当HtmlHelper呈现自身时,它会检查ModelState字典中是否有与helper本身具有相同键的项。如果是这样,控件将使用等于“input-validation-error”的属性类进行渲染,该属性类在css文件中定义。
因此,样式将仅应用于渲染的输入控件。
这是我的解决方案:
<table width="100%">
<tr>
<td>
<label>
How would you like us to contact you?
</label>
</td>
</tr>
<tr class="<%=ViewData.ModelState["pref_row"]!= null ? "input-validation-error":"" %>">
<td>
<span class="bold-text">Email: </span>
<%=Html.CheckBox("EmailDesired")%>
<span class="bold-text">Phone: </span>
<%=Html.CheckBox("PhoneDesired")%>
</td>
</tr>
</table>