Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如果设置了范围并且禁用了Javascript,ASP.NET MVC将无法绑定和验证DropDownList for_Asp.net Mvc_Html.dropdownlistfor_Server Side Validation - Fatal编程技术网

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);
}

谢谢,这修复了异常的问题。模型验证失败,正如预期的那样。谢谢,这修复了异常的问题。模型验证失败,正如预期的那样。