2010-11-17 45 views
0

我正在使用MVC 2作爲項目,而我遇到了問題。在控制我的代碼:MVC 2查看顯示錯誤的模型信息

return View(calendarDay); 

如果我調試這條線,檢查calendarDay它告訴我calendarDay.Id屬性等於2 在視圖中我有一些像這樣的代碼:

<%: Html.HiddenFor(model => model.Id) %> 

然而,當視圖綁定到與Id屬性= 2 calendarDay之後顯示我得到這個所生成的HTML:

<input id="Id" name="Id" type="hidden" value="1"> 

的值是1,所以當我做TryUpdateModel(calendarDay)它將Id屬性設置爲1而不是2,並且當我訪問存儲庫以使對象刪除它時,它會因爲發現錯誤而崩潰。 任何人都知道我可能會做錯什麼?

回答

1

我懷疑你試圖修改你的控制器動作中的POST的值(這是1)到2,這是不可能的,因爲這就是所有的HTML helper的工作原理,它是由設計:它們將首先看看綁定時發佈的值以及之後的模型中。因此,HiddenFor幫手會忽略您的模型的標識並使用已發佈的標識。

作爲一種解決方法你可以:

<input type="hidden" name="Id" value="<%: Model.Id %>" /> 

正如在評論部分的另一個解決辦法是在返回視圖之前清除後動作模型的狀態所建議的@jfar:

MoselState.Clear(); 
+1

或者清除控制器操作中的ModelState。 – jfar 2010-11-17 13:01:29

+1

@jfar,是的,這是一個非常好的解決方法建議。我將編輯我的文章以包含它。 – 2010-11-17 13:34:38

+1

我們應該爲這些問題編寫指南。我想我們每個月都會回答這個問題幾次。 ;) – jfar 2010-11-17 13:49:36

0

看起來像問題是,該視圖使用來自控制器的id而不是來自模型的id。我剛剛更改了參數名稱,現在工作正常。