检查模型状态是否对 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>
的标签选项,如果选择该选项将导致 属性 无效。
我的 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>
的标签选项,如果选择该选项将导致 属性 无效。