MVC为什么这个下拉列表是强制性的?

时间:2012-10-30 09:27:27

标签: asp.net-mvc razor

我在我的视图中有这个下拉列表(实际上我在循环中有很多这样的下拉列表)

@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。查看错误列表,原因是

  

“需要一个值”

为什么下拉列表是强制性的?我希望它们是可选的。

有什么想法吗?

谢谢,

萨钦

2 个答案:

答案 0 :(得分:1)

也许是因为你在模型中使用[Required]属性,如果不是,你可以将属性类型更改为可为空的:

public List<int?> SelectedAttributeValueIds { get; set; }

答案 1 :(得分:1)

这是因为SelectedAttributeValueIds属性是具有隐含值的整数列表。如果您希望它没有值,请使用List<int?>将类型更改为可为空的int。

如果您真的想将其保留为int,可以在DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes中将false设置为Global.asax我建议使用int?但是。