为什么我的textBoxFor使用我的路线数据?

Séb*_*her 5 asp.net-mvc-3

所以我有这三行:

<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>
Run Code Online (Sandbox Code Playgroud)

我已经确定lightgreen值不是我的Model.Id,而是我的路由设置的Id:

routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "MyFunController", action = "Index", id = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)

我在这里得到了一些解释:

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

我确定我不是唯一一个有这个问题的人吗?

(这是MVC 4)

谢谢!

Dar*_*rov 6

您可以从ModelState呈现视图的控制器操作中删除(在Html帮助程序从中获取它的位置)中的有问题的值:

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

现在它Id是你的视图模型的属性,它将被TextBox使用,而不是来自路径的那个.

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