ASP.NET MVC来自相关实体的验证

时间:2014-07-26 19:45:07

标签: c# jquery asp.net-mvc entity-framework jquery-validate

我不确定它是否是一个错误但是如果一个实体本身包含另一个实体,MVC 5(也是3和4)不处理客户端表单验证。所以我的方案是创建一个视图模型,该模型引用其他具有[必需]等验证注释的域模型。如:

public class Membership
    {
        public Company Company { get; set; }

        public User User{ get; set; }

        [Required(ErrorMessage = "{0} can not be empty")]
        public string Type{ get; set; }
    }

    public class User 
        {
            [Required]
            public string UserName {get; set;}
            //..... so on
        }

    public class Company
        {
            [Required]
            public string CompanyName {get; set;}
            //..... so on
        }

当我使用会员实体作为我的注册表单的ViewModel时,验证仅适用于Type属性,但不适用于相关实体User和Company。

根据我的经验,此视图模型为相关实体创建以下客户端dom对象:

<input aria-invalid="true" aria-required="true" data-val="true" data-val-required="Company Name can not be empty" id="Company.CompanyName" name="Company.CompanyName" value="" type="text">

您可能会清楚地注意到id和name dom属性中的对象和属性之间存在点(。)。我确信jquery无法读取这种选择器(内部有点),这可能会导致验证器出现故障。

你有什么想法吗?

更新

我的观点的表格部分简述如下:

  @using (Html.BeginForm("Membership", "Account", FormMethod.Post, new { @class = "seperate-sections fill-up" }))
                    {
              <div class="form-group">
                                    <div class="input-group addon-left">
                                        <span class="input-group-addon"><i class="icon-user"></i></span>
                                        @Html.EditorFor(m => m.Company.CompanyName)
                                    </div>
                                    @Html.ValidationMessageFor(m => m.Company.CompanyName)
                                </div>
              <div class="form-group">
                                    <div class="input-group addon-left">
                                        <span class="input-group-addon"><i class="icon-user"></i></span>
                                        @Html.EditorFor(m => m.User.UserName)
                                    </div>
                                    @Html.ValidationMessageFor(m => m.User.UserName)
                                </div>

}

包含的脚本是:

<script src="/scripts/jquery.validate.min.js?v=8d16f4c1ca0f151" type="text/javascript"></script>
<script src="/scripts/jquery.validate.additional-methods.js?v=8d1428a3c3f3399" type="text/javascript"></script>
<script src="/scripts/jquery.validate.unobtrusive.js?v=8d1765d406515b4" type="text/javascript"></script>
<script src="/scripts/jquery.unobtrusive-ajax.js?v=8d16f4c32f4bcea" type="text/javascript"></script>

0 个答案:

没有答案