3 回答

TA貢獻2036條經驗 獲得超8個贊
我認為是MVC中的一個錯誤。我今天花了幾個小時努力解決這個問題。
鑒于這種:
public ViewResult SomeAction(SomeModel model) { model.SomeString = "some value"; return View(model); }
視圖使用原始模型呈現,忽略更改。所以我想,也許它不喜歡我使用相同的模型,所以我嘗試這樣:
public ViewResult SomeAction(SomeModel model) { var newModel = new SomeModel { SomeString = "some value" }; return View(newModel); }
并且視圖仍然使用原始模型呈現。奇怪的是,當我在視圖中放置斷點并檢查模型時,它具有更改的值。但響應流具有舊值。
最終我發現了你做過的同樣的工作:
public ViewResult SomeAction(SomeModel model) { var newModel = new SomeModel { SomeString = "some value" }; ModelState.Clear(); return View(newModel); }
按預期工作。
我不認為這是一個“功能”,是嗎?

TA貢獻1788條經驗 獲得超4個贊
更新:
這不是一個錯誤。
請停止
View()
從POST操作返回。如果操作成功,請改用PRG并重定向到GET。如果您在返回
View()
從POST動作,連續做表單驗證,并做到這一點的方式MVC設計使用內置的助手。如果你這樣做,那么你不應該使用.Clear()
如果您正在使用此操作返回SPA的 ajax ,請使用web api控制器并忘記,
ModelState
因為您無論如何都不應該使用它。
老答案:
MVC中的ModelState主要用于描述模型對象的狀態,主要與該對象是否有效有關。本教程應該解釋很多。
通常,您不需要清除ModelState,因為它由MVC引擎為您維護。在嘗試遵守MVC驗證最佳實踐時,手動清除它可能會導致意外結果。
您似乎正在嘗試為標題設置默認值。這應該在模型對象被實例化時(在某個地方或在對象本身 - 無參數的ctor中),在get動作上進行,以便它第一次或完全在客戶端(通過ajax或其他)下載到頁面這樣看起來好像用戶輸入了它,然后它返回了已發布的表單集合。一些如何在接收表單集合時添加此值的方法(在POST操作//編輯中)導致這種奇怪的行為可能導致.Clear()
看起來適合您。相信我 - 你不想使用clear。嘗試其他一個想法。

TA貢獻1808條經驗 獲得超4個贊
如果要清除單個字段的值,那么我發現以下技術很有用。
ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture));
注意:將 “Key”更改為要重置的字段的名稱。
- 3 回答
- 0 關注
- 397 瀏覽
添加回答
舉報