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

时间:2013-03-07 21:58:54

标签: 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>

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

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

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

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

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

(这是MVC 4)

谢谢!

1 个答案:

答案 0 :(得分:6)

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

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

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

显然,这只是一个丑陋可怕的解决方法。正确的方法当然是正确定义您的视图模型,以便您没有这样的命名冲突。