gpt4 book ai didi

asp.net-mvc-3 - 为什么我的 textBoxFor 使用我的路线数据?

转载 作者:行者123 更新时间:2023-12-04 18:45:21 25 4
gpt4 key购买 nike

所以我有这三行:

<div style="background-color: lightgreen;">@Html.TextBoxFor(m => m.Id)</div>
<div style="background-color: green;">@Html.DisplayTextFor(m => m.Id)</div>
<div style="background-color: pink;">@Model.Id</div>

我已经确定 lightgreen 值不是我的 Model.Id 而是我的路线设置的 Id:
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "MyFunController", action = "Index", id = UrlParameter.Optional });

我在这里遇到了一些解释:
  • http://forums.asp.net/t/1792086.aspx/1
  • http://www.hanselman.com/blog/TheWeeklySourceCode38ASPNETMVCBetaObscurityModelStateIsValidIsFalseBecauseModelBinderPullsValuesFromRouteData.aspx
  • http://ayende.com/blog/3683/reproducing-a-bug

  • 但他们都让我胃口大开。我正在寻找一种聪明的方法来解决这个问题,我不想更改模型的属性名称,也不想更改路由项的名称。如果我这样做,对我来说将代表很多工作,并不理想。

    我确定我不是唯一一个遇到这个问题的人?

    (这是MVC 4)

    谢谢!

    最佳答案

    您可以从 ModelState 中删除有问题的值。 (这是 Html 助手从中获取它的地方)在呈现 View 的 Controller 操作中:

    public ActionResult SomeAction(int id)
    {
    ModelState.Remove("Id");
    MyViewModel model = ...
    return View(model);
    }

    现在是 Id将被 TextBox 使用的 View 模型的属性,而不是来自路由的属性。

    显然,这只是一个丑陋可怕的解决方法。正确的方法当然是正确定义你的 View 模型,这样你就不会出现这样的命名冲突。

    关于asp.net-mvc-3 - 为什么我的 textBoxFor 使用我的路线数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15282577/

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