3 回答

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

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

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果要清除單個(gè)字段的值,那么我發(fā)現(xiàn)以下技術(shù)很有用。
ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture));
注意:將 “Key”更改為要重置的字段的名稱
- 3 回答
- 0 關(guān)注
- 946 瀏覽
添加回答
舉報(bào)