验证MVC5中的静态下拉列表

时间:2015-06-19 15:55:11

标签: asp.net-mvc unobtrusive-validation

我已经下降了。

模型

 [Required(ErrorMessage = "Please selectvehicle")]
        public string VehicleRequested { get; set; }

index.cshtml

   @Html.DropDownList("VehicleRequested", new List<SelectListItem>

                 {
                    new SelectListItem{ Text="Active", Value = "1" },
                    new SelectListItem{ Text="Not-Active", Value = "0" }
                 })
                    @Html.ValidationMessageFor(model => model.VehicleRequested)

我看不到所需的feild验证附加,M我错了任何地方,请建议

2 个答案:

答案 0 :(得分:3)

您的下拉列表只有2个项目,一个包含value="0",另一个包含value="1" "0""1"都是有效字符串(null都不是)所以验证总是通过。您的财产永远不会无效,因此您永远不会收到验证错误。

为什么将int值绑定到string属性并且只显示2个值(“Active”和“Not-Active”)这一事实表明您的属性确实应该是bool

如果您要添加"-please select-"这样的选项,如果未选择其他2个选项之一,则会导致验证错误,请使用接受optionLabel <的overload / p>

@Html.DropDownList("VehicleRequested", new List<SelectListItem>
{
    new SelectListItem{ Text="Active", Value = "1" },
    new SelectListItem{ Text="Not-Active", Value = "0" }
}, "-Please select-")
@Html.ValidationMessageFor(model => model.VehicleRequested)

这会将第一个选项添加为<option value>-Please select-</option>。请注意,value属性没有值,因此如果在您提交时将其选中,VehicleRequested将为null,您将看到错误消息。

附注:建议您使用强类型帮助程序 - @Html.DropDownListFor(m => m.VehicleRequested, ...)并在控制器中构建您的Selectist并将其作为ViewBag或(更好)传递给视图视图模型属性。

答案 1 :(得分:0)

使用@Html.DropDownListFor()

@Html.DropDownListFor((model => model.VehicleRequested, new List<SelectListItem>

             {
                new SelectListItem{ Text="Active", Value = "1" },
                new SelectListItem{ Text="Not-Active", Value = "0" }
             })