验证错误(数据注释)在视图中不起作用

时间:2017-05-24 15:32:33

标签: c# asp.net-mvc validation data-annotations

我有一个单选按钮组和一个验证,以确保至少选择了其中一个选项。但我的验证不适用于视图,但它们被控制器中的Model.Valid捕获。如何让它在视图上显示,就像其他验证错误一样,而不必在Model.IsValid上的控制器中添加消息失败?

查看:

<div class="form-group">
   <label for="" class="control-label">Role</label>
      <div>
         @foreach (var availableGroup in availableGroups)
          {
             <div class="radio">
                 <label>
                    <input type="radio" name="Group" value="@availableGroup" @defaulted/>
                                @availableGroup
                  </label>
             </div>
           }
        @Html.ValidationMessageFor(m => m.Group)
       </div>
</div>

型号:

[Required(ErrorMessage = "Group must be selected")]
[Display(Name = "Group")]
public string Group { get; set; }    

我是否必须在按钮单击时使用Jquery,然后手动验证?我见过ModelState.AddModelError(),它仍然需要我提交动作方法。有什么东西可以改变我绑定单选按钮的方式吗?

编辑1:在开发人员工具中看到的其中一个选项的Html等价物是

<label>
      <input type="radio" name="Group" value="Group 1">
            Group 1
</label>

编辑2:我已经有数据注释工作,它可以与其他所需的文本框一起使用。我只有在单选按钮列表中才有问题。

2 个答案:

答案 0 :(得分:1)

所以这就是我解决问题的方法。我检查了HTML代码对于Html.CheckboxFor的方式,并试图模仿它以获得结果。

svn cleanup

我必须添加data-val和data-val-required属性才能使它工作。

答案 1 :(得分:-2)

我希望我能解决你的问题,

<强>解决方案:

将以下与验证相关的jquery文件添加到视图

<script type="text/javascript" src="@Url.Content("~/scripts/anyversion")"></script>
<script type="text/javascript" src="@Url.Content("~/scripts/jquery.validate.js")"></script>
<script type="text/javascript" src="@Url.Content("~/scripts/jquery.validate.unobtrusive.js")"></script>

或添加如下,如果您正在使用捆绑

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")

回答问题:

我是否必须在点击按钮时使用Jquery,然后手动验证?

不,默认情况下,Data annotation处理客户端和服务器验证。

希望它对你有所帮助,请让我知道你的想法

由于 KARTHIK