Jquery 如何为整个模型(ASP.NET MVC)实现自定义验证样式

Jquery 如何为整个模型(ASP.NET MVC)实现自定义验证样式,jquery,css,asp.net-mvc-3,Jquery,Css,Asp.net Mvc 3,我目前正在MVC3中开发自定义验证代码。我对每个属性都有许多规则,并为整个模型本身制定规则,如下所示: 验证代码: [AttributeUsage(AttributeTargets.All)] public sealed class VerifyRoleIntegrityAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext

我目前正在MVC3中开发自定义验证代码。我对每个属性都有许多规则,并为整个模型本身制定规则,如下所示:

验证代码:

[AttributeUsage(AttributeTargets.All)]
public sealed class VerifyRoleIntegrityAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        RoleItem item = (RoleItem)value;
        if (item.Name == null && item.UserId != 0)
            return new ValidationResult("Error: Name is missing");

        return ValidationResult.Success;
    }
}
型号:

[VerifyRoleIntegrity]
public class RoleItem //imagine this as a single row of div, there's a list of them
{
    [ValidUser]
    public string Name { get; set; } //bound to a textbox using Html.TextBoxFor
    public int UserId { get; set; }
    public bool IsAdmin { get; set; }
    public bool IsUserType1 { get; set; }
    public bool IsUserType2 { get; set; }
}
<div class="ad-row">
    @Html.ValidationMessageFor(model => model)
    <div class="ad-cell">
        @Html.TextBoxFor(model => model.Name)
        @Html.HiddenFor(model => model.UserId)
    </div>
    <div class="ad-cell">
        @Html.CheckBoxFor(model => model.IsAdmin)
    </div>
    <div class="ad-cell">
        @Html.CheckBoxFor(model => model.IsUserType1)
    </div>
    <div class="ad-cell">
        @Html.CheckBoxFor(model => model.IsUserType2)
    </div>
</div>
查看:

[VerifyRoleIntegrity]
public class RoleItem //imagine this as a single row of div, there's a list of them
{
    [ValidUser]
    public string Name { get; set; } //bound to a textbox using Html.TextBoxFor
    public int UserId { get; set; }
    public bool IsAdmin { get; set; }
    public bool IsUserType1 { get; set; }
    public bool IsUserType2 { get; set; }
}
<div class="ad-row">
    @Html.ValidationMessageFor(model => model)
    <div class="ad-cell">
        @Html.TextBoxFor(model => model.Name)
        @Html.HiddenFor(model => model.UserId)
    </div>
    <div class="ad-cell">
        @Html.CheckBoxFor(model => model.IsAdmin)
    </div>
    <div class="ad-cell">
        @Html.CheckBoxFor(model => model.IsUserType1)
    </div>
    <div class="ad-cell">
        @Html.CheckBoxFor(model => model.IsUserType2)
    </div>
</div>

@Html.ValidationMessageFor(model=>model)
@Html.TextBoxFor(model=>model.Name)
@Html.HiddenFor(model=>model.UserId)
@CheckBoxFor(model=>model.IsAdmin)
@CheckBoxFor(model=>model.IsUserType1)
@CheckBoxFor(model=>model.IsUserType2)
对于ValidUser,每当我在发布后遇到验证错误时,MVC都会方便地给文本框一个干净的红色高亮显示,而不需要我设置任何样式。这是我有意的行为

不过,为了验证角色完整性,我希望以某种方式突出显示整个错误行,也许可以更改其封闭div的背景色。目前我只能实现一个Html.ValidationMessageFor(model=>model),在这里我可以输出自定义验证类的错误消息。与其说只是一条消息,不如说我想要验证的样式

我想我需要深入研究一下MVC提供给我的内置jquery和css文件,但是我没有足够的javascript/css知识来正确地完成这项工作,所以我想寻求帮助来完成这个循环。我在网上找到的大部分内容都停留在如何实现ValidationAttribute上,但除此之外,我还没有找到多少。此外,我意识到我可以通过javascript检测添加的验证消息来对该div行进行处理,但这是一种攻击,不是一种正确的实现


谢谢。

您是否使用该插件进行验证?解决方案中添加了许多插件,如jquery.validate.js和jquery.validate.unobtrusive.js,它们可能是相关的。我发现您使用的是jquery验证插件。当某些元素验证失败时。它确实会用黄色突出显示该特定元素作为默认值&错误msg showsup也会用红色突出显示。它不是这样工作的吗?它确实工作,至少对ValidUser来说是这样。元素(文本框)以红色(不是黄色)突出显示,这与预期一致。但对于VerifyRoleIntegrity(整个模型),没有突出显示的元素。