Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
C# DropDownListFor<&燃气轮机;如果在调用前在模型中更改了所选值,则不使用该值_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# DropDownListFor<&燃气轮机;如果在调用前在模型中更改了所选值,则不使用该值

C# DropDownListFor<&燃气轮机;如果在调用前在模型中更改了所选值,则不使用该值,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,为什么DropDownListFor不总是设置所选值 在我的例子中,我注意到在表单发布之后构建下拉列表时会发生这种情况,并且该值与提交的值不同 因此,场景是一个表单,其中包含一个下拉列表,用于选择要查看的类别。提交时,下拉列表将作为结果的一部分重新生成,并预选为您选择的下拉列表 但是,如果控制器操作更改了发布的值,然后将修改后的模型传递给视图,则将忽略模型中的值,并且不会将任何选项设置为选中 即使您构造DropDownListFor以专门设置选定值,也不会将任何选项设置为选定 如果在进入视图之前

为什么
DropDownListFor
不总是设置所选值

在我的例子中,我注意到在表单发布之后构建下拉列表时会发生这种情况,并且该值与提交的值不同

因此,场景是一个表单,其中包含一个下拉列表,用于选择要查看的类别。提交时,下拉列表将作为结果的一部分重新生成,并预选为您选择的下拉列表

但是,如果控制器操作更改了发布的值,然后将修改后的模型传递给视图,则将忽略模型中的值,并且不会将任何选项设置为选中

即使您构造
DropDownListFor
以专门设置选定值,也不会将任何选项设置为选定

如果在进入视图之前不更改模型中提交的值,则只需执行以下操作:

@Html.DropDownListFor(m => m.Selection.CategoryId,
                           new SelectList(Model.Categories.Select(c => new SelectListItem { Value = c.Id, Text = c.Name + " (" + c.Id + ")" }), "Value", "Text"),  
                            "All",                             
                            new { onchange = "this.form.submit();" })
但由于存在问题(在控制器操作中修改提交的值),即使以下专门设置所选选项的方法也不起作用:

@Html.DropDownListFor(m => m.Selection.CategoryId,
                           new SelectList(Model.Categories.Select(c => new SelectListItem { Value = c.Id, Text = c.Name + " (" + c.Id + ")" }), "Value", "Text", Model.Selection.CategoryId),  
                            "All",                             
                            new { onchange = "this.form.submit();" })

@Html.DropDownListFor(m => m.Selection.CategoryId,
                           new SelectList(Model.Categories.Select(c => new SelectListItem { Value = c.Id, Text = c.Name + " (" + c.Id + ")", Selected = c.Id == Model.Selection.CategoryId }), "Value", "Text"),  
                            "All",                             
                            new { onchange = "this.form.submit();" })

这不是关于
DropDownListFor
方法,而是关于模型绑定。当您在POST请求后返回另一个视图时,ASP.NET MVC认为验证失败,并使用以前的值进行模型绑定。您可以在本文中了解更多有关此行为的信息

您可以通过在操作中清除ModelState来防止这种情况

[HttpPost]
public ActionResult SomeAction()
{
    ModelState.Clear();
    //return View(model); 
}

很好,谢谢你,我刚才把头发拔了一点。