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使用,而不是來自路線的模型。

顯然這只是一個醜陋的可怕的解決方法。正確的方法當然是正確地定義你的視圖模型,這樣你就不會有這種命名衝突。