Asp.net mvc 3 为什么我的文本框用于使用我的路线数据?

Asp.net mvc 3 为什么我的文本框用于使用我的路线数据?,asp.net-mvc-3,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 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>
我这里有一些解释:

但它们都让我胃口不好。我正在寻找一种解决此问题的智能方法,我不想更改模型的属性名称,也不想更改管线项目的名称。如果我这样做,对我来说将意味着大量的工作,这并不理想

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

(这是MVC4)


谢谢

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

public ActionResult SomeAction(int id)
{
    ModelState.Remove("Id");
    MyViewModel model = ...
    return View(model);
}
现在,文本框使用的是视图模型的
Id
属性,而不是来自路由的属性


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

这是我在URL中发送日期时间(包括时间00:00:00)时发现的唯一选项,因此它以00:00:00显示在屏幕上,并忽略了模型属性上的格式设置。获取00:00:00的唯一方法是忽略ModelState中的字段,因此MVC停止将URL中的文本放入文本框。
public ActionResult SomeAction(int id)
{
    ModelState.Remove("Id");
    MyViewModel model = ...
    return View(model);
}