检查模型状态是否对 MVC 中的值有效

Checking if model state is valid against a value in MVC

我的 MVC 应用程序中有一个下拉列表,它是我表单中的必填字段。

我已经像这样创建并填写了我的列表:

   @Html.DropDownListFor(x => x.ServiceName,
                    new SelectList(
                        new List<Object>
                        {
                            new { value = "Empty", text = "Select..."},
                            new { value = "Service Name 1", text = "Service Name 1"},
                            new { value = "Service Name 1", text = "Service Name 2"},
                            new { value = "Service Name 1", text = "Service Name 3"},
                            new { value = "Service Name 1", text = "Service Name 4"}
                        },
                            "value",
                            "text",
                            0), new { @class = "form-control" })

我需要我的表单 return 回复一条消息,告诉用户他们需要 select 此菜单中的一个选项是他们什么都不做 select。在我的模型 class 中,我的服务名称上方有 [Required(ErrorMessage = "Service Name must be selected")]

看起来像这样:

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

但是我不知道如何检查这个值。到目前为止,我已经尝试了以下方法:

if(newMember.getProperty("serviceManager").Value == "0")
{
   ModelState.IsValid = false;
}

但这不起作用。我已经尝试了上述的一些变体,但它们也没有用。我目前正在使用谷歌搜索来寻找答案,但运气不佳。

有人可以向我解释一下如何实现我想要实现的目标吗?

编辑

刚刚更新了我的代码以显示我刚刚完成的新测试,但它仍然没有 return 返回一个错误,告诉我在提交空表单时必须 selected 服务。

您有 getProperty 来获取 serviceManager,但您的视图绑定到 ServiceName。

尝试将其更改为...

if(newMember.getProperty("ServiceName").Value == "0")

我目前没有 visual studio,所以代码可能不准确。

@Html.DropDownListFor(x => x.ServiceName,
                new SelectList(
                    new List<Object>
                    {
                        new { value = 1, text = "Service Name 1"},
                        new { value = 2, text = "Service Name 2"},
                        new { value = 3, text = "Service Name 3"},
                        new { value = 4, text = "Service Name 4"}
                    },
                        "value",
                        "text",
                        0), "Select...", new { @class = "form-control" })

并且如果您在 ViewModel 中的 ServiceName 上有 [Required],那么在您的控制器中您将能够执行 ModelState.IsValid 例如

if(ModelState.IsValid){
    // Do code here if it is valid
}else{
    return View(viewModel)
}

使用呈现选项标签的 DropDownListFor() 的重载,并使您 ServiceName 属性 可以使用 [Required] 属性为 null。您现有 SelectList 的问题是您包含了第一个选项,该选项的值 ("Empty") 是一个有效字符串,因此它通过了验证。

型号

[Required]
public string ServiceName { get; set; }

控制器

List<string> services = new List<string>() { "Service Name 1", "Service Name 2", "Service Name 3", "Service Name 4" };
ViewBag.Services = new SelectList(services);
return View(yourModel);

查看

@Html.DropDownListFor(x => x.ServiceName, (SelectList)ViewBag.Services, "--Please Select--", new { @class = "form-control" })
@Html.ValidationMessagFor(x => x.ServiceName)

请注意 SelectList 不包含“--请 Select--”的元素。 DropDownListFor() 的第三个参数添加了一个没有值 <option value>--Please Select--</option> 的标签选项,如果选择该选项将导致 属性 无效。