在我的ASP.NET MVC 3應用程序,我有一個頁面,其形式提交後,我需要從形式改變的值。如果我在ViewModel中使用它,它不起作用,我必須使用ModelState["Field"].Value
。ASP.NET MVC 3 POST的ModelState和視圖模型
的事情是,我其實有很多工作我都對視圖模型時,頁面加載和POST之後做。所以我有一個接收ViewModel並完成所有工作的方法。但是,正如我所說的,在POST之後,修改ViewModel對象是沒有用的。這是爲什麼?控制器上的方法返回View(viewModel);
。該視圖不應該使用ViewModel值嗎?
我想明白爲什麼沒用修改視圖模型,也知道如果在ModelState中的一些方法,「刷新」字段的值拋出一個視圖模型對象。
這裏是我的控制器代碼:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(MyViewModel viewModel)
{
try
{
if (ModelState.IsValid)
//Do stuff and redirect
}
catch(Exception ex)
{
//Log and add error to the ModelState
}
someMethodWhichDoesALotOfThingsInTheViewModel(viewModel);
return View(viewModel);
}
我覺得代碼的其餘部分是不必要的,如果有人認爲這將有助於讓我知道!
更新
我不想失去任何錯誤,甚至這些領域中的視圖模型改變。一個很好的例子就是驗證碼,如果用戶在表單中發生任何錯誤(僅限於驗證碼字段或僅與其他字段而不驗證驗證碼),我想向他顯示所有錯誤並更新驗證碼。用舊的captcha值插入來渲染表單是沒有意義的,所以我想讓這個字段爲空。
更新2
我選擇把@Value = Model.PropertyInViewModel
每個Html.TextBoxFor
的HTML屬性。但我寧願避免這種討厭的工作,所以如果有人提出更好的解決方案,請讓我知道。
如果你的方法進行了更改'viewModel',這是你傳遞到你的'Index'看法相同的對象。您向我們展示的代碼沒有任何問題 - 它必須位於其他位置。 – 2011-05-27 17:36:15
我認爲它忽略了由於慣例所做的更改。如果在帖子後顯示相同的視圖,Html幫手將撤回嘗試的值。就像你沒有通過驗證一樣。嘗試清除ModelState錯誤。 – Jab 2011-05-27 21:08:44
我更新了我的問題,請查看。 – Diego 2011-05-30 10:29:18