2013-06-25 34 views
0

我有一個列出項目集合的視圖。我允許用戶從視圖中動態添加和刪除行。這一切工作正常。我添加和刪除行控制器,然後將模型發送回看,帶動態行的ViewModel數據

return View("EditPage", Dmodel); 

問題是我的領域之一,採用的是下拉列表中,

<td>@Html.DropDownListFor(m=>m.Order[i].Software, Software()) 

後,我從刪除行我的收藏並返回到視圖,下拉列表不會選擇替換已刪除行的行的正確值。

我注意到,這兩個模型的訪問方法返回不同的值,

m=>m.Order[i].Software --This is wrong 
Model.Order[i].Software -- This is correct 

它看起來像lambda表達式是看舊的數據,但是模型是在尋找什麼,我傳遞到視圖。

有關如何解決此問題的任何想法?

+0

對不起,您要刪除的* item *是'Order'還是'Software'?另外,'i'從哪裏來? –

+0

我是我視圖中循環遍歷訂單集合的循環的一部分。軟件是訂單記錄的一個領域。 – John

+0

好的,但'Software'也是一個集合,對吧?然而,你從'Order'中刪除一個項目,而不是從'Software'中刪除。那是對的嗎? –

回答

0

代替在POST方法中,使用重定向返回視圖的,所以不是

return View("EditPage", Dmodel); 

重定向

return RedirectToAction("EditPage",...); 

這種模式被稱爲POST-REDIRECT-GET。成功操作後,您應該重定向到GET。

當前現有的ModelState值與新的值衝突。您刪除了模型中的值,但ModelState仍然包含它們,因此您在編制索引時遇到了問題。你可以用不同的方式修復它,但使用這種模式是最好的解決方案。

+0

謝謝,這確實有幫助。我也注意到ModelState.Clear()似乎也起作用。我猜想,跳起來是迫使ModelState清除。 – John

+0

@John:是的。重定向清除了「ModelState」,因爲它是新的請求。 – LukLed