Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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# 路由参数和视图模型属性同名-意外行为_C#_Asp.net Mvc_Model Binding - Fatal编程技术网

C# 路由参数和视图模型属性同名-意外行为

C# 路由参数和视图模型属性同名-意外行为,c#,asp.net-mvc,model-binding,C#,Asp.net Mvc,Model Binding,不确定这是不是一个错误,或者我错过了什么 当我有一个route参数“bar”并且在我的视图模型中有一个同名的属性“bar”时,MVC会变得混乱,并在html助手中显示意外的结果。让我们再仔细看看 (代码是免费输入的,所以它可能不起作用,但我希望它足够让我得到我刚刚偶然发现的东西) 让我们从以下控制器开始: public class MyController : Controller { ... [Route("my/route/{bar}")] public ActionResult

不确定这是不是一个错误,或者我错过了什么

当我有一个route参数“bar”并且在我的视图模型中有一个同名的属性“bar”时,MVC会变得混乱,并在html助手中显示意外的结果。让我们再仔细看看

(代码是免费输入的,所以它可能不起作用,但我希望它足够让我得到我刚刚偶然发现的东西)

让我们从以下控制器开始:

public class MyController : Controller {
  ...
  [Route("my/route/{bar}")]
  public ActionResult Foo(string bar) {
    ...
    var viewModel = new MyViewModel() { Bar = "baz"; }

    return this.View(viewModel);
  }
  ...    
}
我们将以下视图模型传递给视图:

public class MyViewModel {
  ...
  public string Bar { get; set; }
  ...
}
在我们看来,我们有这样的想法:

...
@Html.LabelFor(l => l.Bar)
@Html.EditorFor(m => m.Bar)
...
@Html.ActionLink("Link", "Foo", "MyController", new { bar = "mystring" })
当我们呼吁采取这样的行动时:

...
@Html.LabelFor(l => l.Bar)
@Html.EditorFor(m => m.Bar)
...
@Html.ActionLink("Link", "Foo", "MyController", new { bar = "mystring" })
EditorFor中的预期结果是“baz”,但事实并非如此。实际上它是
“mystring”
。即使
@Model.Bar
将打印预期结果
“baz”

这是期望的行为,还是(已知的)错误?如果没有,我可以在哪里报告这一点


致以最诚挚的问候

这不是每个设计的缺陷,而是Model binder在MVC中的工作方式:

这是按设计的-ModelState是最高优先级的值提供程序 对于模型属性,甚至高于模型本身。毫无疑问 字符串参数,ModelState不包含MyProperty的值,因此 框架使用模型值

见此,并: