5

所以我有这三行:

<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>

我已经确定浅绿色值不是我的 Model.Id 而是由我的路线设置的 Id:

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

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

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

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

(这是 MVC 4)

谢谢!

4

1 回答 1

6

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

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

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

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

于 2013-03-07T22:10:56.510 回答