所以我有这三行:
<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)
谢谢!
答案 0 :(得分:6)
您可以在呈现视图的控制器操作中从ModelState
(Html帮助程序从中获取)中删除有问题的值:
public ActionResult SomeAction(int id)
{
ModelState.Remove("Id");
MyViewModel model = ...
return View(model);
}
现在,您的视图模型的Id
属性将被TextBox使用,而不是来自路径的属性。
显然,这只是一个丑陋可怕的解决方法。正确的方法当然是正确定义您的视图模型,以便您没有这样的命名冲突。