我在我的视图中有这个下拉列表(实际上我在循环中有很多这样的下拉列表)
@Html.DropDownListFor(m => m.SelectedAttributeValueIds[i], Model.AttributeValuesList[Convert.ToInt32(type.Value)], "Select a value")
模型的相关部分是
public IDictionary<int, List<SelectListItem>> AttributeValuesList { get; set; }
public List<int> SelectedAttributeValueIds { get; set; }
上面的下拉列表包含正确的值列表。如果我选择其中一个值并提交,则所选值将正确发布并正确保存到SelectedAttributeValueIds列表中。
现在的问题是,如果我没有从这些下拉列表中选择一个或多个值,我的PostState操作方法中的ModelState.IsValid为false。查看错误列表,原因是
“需要一个值”
为什么下拉列表是强制性的?我希望它们是可选的。
有什么想法吗?
谢谢,
萨钦
答案 0 :(得分:1)
也许是因为你在模型中使用[Required]
属性,如果不是,你可以将属性类型更改为可为空的:
public List<int?> SelectedAttributeValueIds { get; set; }
答案 1 :(得分:1)
这是因为SelectedAttributeValueIds
属性是具有隐含值的整数列表。如果您希望它没有值,请使用List<int?>
将类型更改为可为空的int。
如果您真的想将其保留为int
,可以在DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes
中将false
设置为Global.asax
我建议使用int?但是。