Asp.net mvc 如果设置了范围并且禁用了Javascript,ASP.NET MVC将无法绑定和验证DropDownList for
我的模型中有以下属性:Asp.net mvc 如果设置了范围并且禁用了Javascript,ASP.NET MVC将无法绑定和验证DropDownList for,asp.net-mvc,html.dropdownlistfor,server-side-validation,Asp.net Mvc,Html.dropdownlistfor,Server Side Validation,我的模型中有以下属性: [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 w
[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;
List items=newlist();
//数字只是一个列表,其中包含具有整数字段编号的实体
items.AddRange(数字)。
选择(n=>newselectListItem(){Text=n.Number.ToString(),Value=n.Number.ToString()})
.ToArray());
ViewBag.number=项目;
在我看来,我有以下几点:
@Html.DropDownListFor(m => m.Number, ViewBag.Numbers as IEnumerable<SelectListItem>, "Select a number")
@Html.ValidationMessageFor(m => m.Number)
@Html.DropDownListFor(m=>m.Number,ViewBag.Number作为IEnumerable,“选择一个数字”)
@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>'.
键为'Number'的ViewData项的类型为'System.Int32',但必须为'IEnumerable'类型。
当我注释掉[Range]时,则不存在此类异常,但它似乎不起作用-我可以发布空的“选择一个数字”选项(其值为=”),并且我的模型通过验证,但它不应该-空字符串不是有效的整数!为什么启用Javascript时可以正常工作,但服务器端失败?在POST操作中,不要忘记重新填充
ViewBag.Numbers属性,与返回视图之前的GET操作相同:
[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
// some processing ...
// now repopulate the ViewBag if you intend to return the same view
ViewBag.Numbers = numbers
.Select(n => new SelectListItem {
Text = n.Number.ToString(),
Value = n.Number.ToString()
})
.ToList();
return View(model);
}
在POST操作中,不要忘记重新填充ViewBag.Numbers
属性,与返回视图之前的GET操作相同:
[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
// some processing ...
// now repopulate the ViewBag if you intend to return the same view
ViewBag.Numbers = numbers
.Select(n => new SelectListItem {
Text = n.Number.ToString(),
Value = n.Number.ToString()
})
.ToList();
return View(model);
}
谢谢,这修复了异常的问题。模型验证失败,正如预期的那样。谢谢,这修复了异常的问题。模型验证失败,正如预期的那样。