验证 MVC5 中的静态下拉列表

Validate static dropdown in MVC5

我有下拉。

型号

 [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)

我看不到所需的字段验证追加,我哪里错了,请建议

使用@Html.DropDownListFor()

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

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

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

不太清楚为什么要将 int 值绑定到 string 属性,而且您只显示 2 个值("Active" 和 "Not-Active") 建议你 属性 真的应该是 bool.

如果你想添加一个选项,如 "-please select-",如果未选择其他 2 个选项之一会导致验证错误,则使用 overload 接受 optionLabel

@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 或 (更好)视图模型 属性.