2013-03-07 51 views
4

所以我有这三条线:为什么我的textBoxFor使用我的路线数据?

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

谢谢!

回答

5

您可以删除从ModelState有问题的值(这是在HTML佣工采取它)在被渲染视图控制器动作:

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

现在是你的观点的Id财产模型将会被TextBox使用,而不是来自路线的模型。

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