gpt4 book ai didi

c# - 具有相同名称的路由参数和 View 模型属性 - 意外行为

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:54 24 4
gpt4 key购买 nike

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

当我有一个路由参数“bar”并且在我的 View 模型中有一个具有相同名称“Bar”的属性时,MVC 变得困惑并在 html 帮助程序中显示意外结果。让我们仔细看看。

(代码是自由输入的,所以它可能无法工作,但我希望它足以让我偶然发现)

让我们从以下 Controller 开始:

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

return this.View(viewModel);
}
...
}

我们将以下 View 模型传递给 View :

public class MyViewModel {
...
public string Bar { get; set; }
...
}

在 View 中,我们有这样的东西:

...
@Html.LabelFor(l => l.Bar)
@Html.EditorFor(m => m.Bar)
...

当我们调用这样的操作时:

@Html.ActionLink("Link", "Foo", "MyController", new { bar = "mystring" })

EditorFor 中的预期结果是 "baz",但事实并非如此。实际上它是 "mystring"。尽管 @Model.Bar 将打印预期结果 "baz"

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

最好的问候

最佳答案

这不是每个设计的错误,这就是模型绑定(bind)器在 MVC 中的工作方式:

This is by design - ModelState is the highest priority value-provider for model properties, higher than even model itself. Without query string parameter, ModelState does not contain value for MyProperty, so framework uses model value.

看这个questionanswer :

关于c# - 具有相同名称的路由参数和 View 模型属性 - 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31431049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com