我的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" })
我需要我的表单返回一条消息,告诉用户他们需要从此菜单中选择一个选项,他们不会选择任何内容。我的服务名称在我的Model类中位于其上方[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;
}
但这不起作用。我已尝试过上述的一些变体,但它们也没有奏效。我目前正在谷歌上搜索答案,但我没有太多运气。
有人可以向我解释如何实现我想要实现的目标吗?
修改
刚刚更新了我的代码以显示我刚刚完成的新测试,但它仍然没有返回错误,告诉我在提交空表单时必须选择服务。
答案 0 :(得分:1)
您有getProperty来获取serviceManager,但您查看的是绑定到ServiceName。
尝试将其更改为...
if(newMember.getProperty("ServiceName").Value == "0")
OR
我现在没有可用的视觉工作室,所以代码可能不准确。
@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上有[必需],那么在您的控制器中,您将可以执行ModelState.IsValid,例如。
if(ModelState.IsValid){
// Do code here if it is valid
}else{
return View(viewModel)
}
答案 1 :(得分:1)
使用呈现选项标签的DropDownListFor()
重载,并使ServiceName
属性可以为[Required]
属性。您现有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
不包含“--Please Select--”的元素。 DropDownListFor()
的第3个参数添加了一个没有值<option value>--Please Select--</option>
的标签选项,如果选中此选项将导致该属性无效。