modelstate.isvalid没有得到所有错误

时间:2015-02-20 08:33:30

标签: 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 = "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; }

现在当我使用此模型从我的表单发帖并且我没有提供任何值时,我只收到Email,Company和UserName的错误消息。 我没有收到SelectedLanguages或SelectedBusinessUnits的消息。

我做错了什么?

这是视图

 @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>
        }

1 个答案:

答案 0 :(得分:0)

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

查看this SO post,为您指明方向。

基本设置:

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; }