我的模型中有以下属性:
[Required]
[Range(1, int.MaxValue, ErrorMessage = "Bad number")]
public virtual int Number { get; set; }
我在控制器中填写它:
List<SelectListItem> items = new List<SelectListItem>();
// numbers is just a list with entities with an integer field Number
items.AddRange(numbers.
Select(n => new SelectListItem() { Text = n.Number.ToString(), Value = n.Number.ToString() })
.ToArray());
ViewBag.Numbers = items;
在我看来,我有以下几点:
@Html.DropDownListFor(m => m.Number, ViewBag.Numbers as IEnumerable<SelectListItem>, "Select a number")
@Html.ValidationMessageFor(m => m.Number)
如果启用了 Javascript,它似乎工作正常 - 当我选择第一项(它是空的“选择一个数字”)时,必需的验证器会启动并且不允许发布。
但是,当我禁用 Javascript 时,我在该 DropDownListFor 方法调用上的视图中出现异常:
The ViewData item that has the key 'Number' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'.
当我注释掉 [Range] 时,没有这样的异常,但似乎Required 不起作用-我可以发布空的“选择一个数字”选项(它具有 value="")并且我的模型通过了验证,但它不应该 - 空字符串不是有效的整数!为什么它在启用 Javascript 的情况下工作正常,但在服务器端失败?