ASP.NET MVC数据验证 - 突出显示表行与文本框

时间:2009-06-09 01:52:55

标签: asp.net-mvc css validation

在ASP.NET MVC视图中,我有几个复选框,一个用于电子邮件地址,一个用于电话。我想确保至少检查一个(两者都可以检查,因此单选按钮不理想),如果两者都没有,突出显示红色边框的行就像文本框一样具有验证功能... < / p>

我还有其他正确验证的字段,当文本框和textareas出现问题时,CSS正在发生变化。下面的代码显示的消息告知用户他们必须指定联系人首选项,但不会将该行突出显示为有问题...

SCREEN SHOT alt text

查看

<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>&nbsp;
            <%=Html.CheckBox("EmailDesired")%>
            &nbsp; &nbsp; <span class="bold-text">Phone: </span>&nbsp;
            <%=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();
    }
}

1 个答案:

答案 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>