Asp.net mvc modelstate.isvalid无法获取所有错误

Asp.net mvc modelstate.isvalid无法获取所有错误,asp.net-mvc,modelstate,Asp.net Mvc,Modelstate,我有这个模型: [Required(ErrorMessage = "Please provide a valid EmailAddress")] [EmailAddress] [Display(Name = "Email")] public string Email { get; set; } [Required(ErrorMessage = "Please provide a company name")] [Display(Name = "Compa

我有这个模型:

[Required(ErrorMessage = "Please provide a valid EmailAddress")]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Please provide a company name")]
    [Display(Name = "Company")]
    public string CompanyName { get; set; }

    [Required(ErrorMessage = "Please provide a username")]
    [Display(Name = "Username")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "Please select at least one language")]
    public int[] SelectedLanguages { get; set; }
[Required(ErrorMessage = "Please select at least one business unit")]
    public int[] SelectedBusinessUnits { get; set; }
现在,当我使用这个模型从我的表单发布帖子时,我没有提供任何值,我只会收到电子邮件、公司和用户名的错误消息。 我没有收到所选语言或所选业务单元的消息

我做错了什么

这就是观点

 @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
        {
            @Html.AntiForgeryToken()
            <h4>Create a new account.</h4>
            <hr />
            @Html.ValidationSummary("", new { @class = "text-danger" })

            <div class="form-group">
                @Html.LabelFor(m => m.CompanyName, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.TextBoxFor(m => m.CompanyName, new { @class = "form-control" })
                </div>
            </div>
            <div class="form-group">
                @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
                </div>
            </div>
            <div class="form-group">
                @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
                </div>
            </div>

            <div class="form-group">
                @foreach (var la in Model.Languages)
                {
                    <input type="checkbox"
                           name="SelectedLanguages" value="@la.Id" id="@la.Id" />
                    <label for="@la">@la.Title</label>
                }
            </div>

            <div class="form-group">
                @foreach (var bu in Model.BusinessUnits)
                {
                    <input type="checkbox"
                           name="SelectedBusinessUnits" value="@bu.Id" id="@bu.Id" />
                    <label for="@bu.Id">@bu.Title</label>
                }
            </div>

            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" class="btn btn-default" value="Register" />
                </div>
            </div>
        }

我认为您必须编写一个自定义验证例程,并附带ValidationAttribute。不要认为存在一个简单的开箱即用验证器来检查数组中是否存在一个或多个值

退房,为你指明正确的方向

基本设置:

public class ArrayContainsValueAttribute: ValidationAttribute 
{
  // your checks here (pseudo)
  if(!array.Any())
    return false;

  return true;
}

[ArrayContainsValue(ErrorMessage = "Please select at least one business unit")]
public int[] SelectedBusinessUnits { get; set; }

对我有用。发布时是否检查了ModelState是否存在错误?我没有使用post方法进行注册。当我按下submit按钮时,我立即收到验证消息,但不是针对我添加的两个列表。您的意思是在submt之前,您没有收到SelectedLanguages和SelectedBusinessUnits的客户端验证错误吗?我想是的listboxes@StephenMuecke这是正确的。客户端验证没有被触发。这可能是因为您没有选中任何复选框。未选中的复选框不会回发,因此数组将为null,并且在服务器端无效,但在客户端无效,因为它们在客户端上确实有值