我的视图模型有一个 [Required] 不可为空的 int 属性,由 DropDownListFor 选择。如果要从中选择的列表为空,则 ModelState.IsValid 为真。
我的模型有一个必需的 int 属性:
public class MyModel
{
[Required]
public int PickedValue { get; set;}
IEnumerable<SelectListItem> Items { get; set; }
}
在我的 Create 视图中,我渲染了一个<select>
元素:
@Html.DropDownListFor(model => model.PickedValue, model.Items)
在我的控制器中,如果model.Items
列表为空(没有可供选择的元素),ModelState.IsValid
则为真:
[HttpPost]
public ActionResult Create( MyModel model )
{
if( ModelState.IsValid )
{
// true, and ModelState.Keys doesn't contain PickedValue because it was never POSTed.
}
//...
}
现在,如果:
PickedValue
是Nullable
(int?
),或- 如果我的
<select>
-@Html.DropDownListFor(model => model.PickedValue, model.Items, ""
) 中有一个空项目,或者 - 如果启用了客户端验证(因为从未触发该操作)。
如果POST 数据中缺少某些属性但是否有强制方法ModelState.IsValid
?这不应该是默认行为吗?false
MyModel
[Required]