微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 客户端自定义数据注释验证

我已经创建了一个自定义数据注释来对我的视图模型进行一些验证.问题是它没有在客户端验证.这是我的模特:
public class Memberviewmodel
{
    [ScaffoldColumn(false)]
    public int MemberId { get; set; }

    [required(ErrorMessage = "Name is required")]
    public string Name { get; set; }

    //My custom data annotation
    [EnforceTrue(ErrorMessage = "You must agree to the Terms and Conditions")]
    public bool AgreeTerms { get; set; }
}

我的数据注释验证码:

public class EnforceTrueAttribute : ValidationAttribute,IClientValidatable
{
    public EnforceTrueAttribute() { }

    public override bool IsValid(object value)
    {
        return value != null && (bool)value == true;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata Metadata,ControllerContext context)
    {
        yield return new ModelClientValidationRule() { ValidationType = "enforcetrue",ErrorMessage = this.ErrorMessageString };
    }
}

我的控制器方法

[HttpPost]
public ActionResult Index(Memberviewmodel viewmodel)
{
    Member member = new Member();
    TryUpdateModel(member);

    if (ModelState.IsValid)
    {
        _membersRepository.SaveMember(member);

        return RedirectToAction("Index","Home");       
    }

    return View(viewmodel);     // validation error,so redisplay same view            
}

我的观点是:

@using (Html.BeginForm("Index","Members",FormMethod.Post)) {

    @Html.HiddenFor(m => m.MemberId)

    <div class="editor-label">@Html.LabelFor(model => model.Name)</div>
    <div class="editor-field">@Html.TextBoxFor(model => model.Name)</div>

    <div class="editor-field">@Html.CheckBoxFor(model => model.AgreeTerms) <label for="AgreeTerms">I agree to the Terms and Conditions</label></div>

    <p>
        <input type="submit" value="Submit" />
    </p>

    @Html.ValidationSummary()
}

所以我的所有其他错误消息都会在客户端验证的验证摘要显示出来.但是对于我的自定义数据注释,错误消息在模型的其余部分有效之前不会显示,并且在您提交表单和页面重新加载之后,错误显示摘要中.

我还需要做些什么来让它在其他错误摘要显示出来吗?

我正在使用C#和ASP.NET MVC 3

解决方法

最近有同样的问题.你可以写:
$.validator.addMethod('enforcetrue',function (value,element) {
    return $(element).is(":checked");
});
$.validator.unobtrusive.adapters.add('enforcetrue',[],function (options) {
    options.messages['enforcetrue'] = options.message;
    options.rules['enforcetrue'] = options.params;
});

类似的问题在这里ASP.NET MVC 3 client-side validation

原文地址:https://www.jb51.cc/csharp/95124.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐