第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Asp.net MVC ModelState.Clear

Asp.net MVC ModelState.Clear

www說 2019-09-02 08:04:07
Asp.net MVC ModelState.Clear任何人都可以給我一個(gè)關(guān)于ModelState在Asp.net MVC中的角色的簡潔定義(或者鏈接到一個(gè))。特別是我需要知道在什么情況下打電話是必要的或可取的ModelState.Clear()。有點(diǎn)開放了 ......對(duì)不起,我想如果告訴你我在做什么可能會(huì)有所幫助:我在一個(gè)名為“Page”的控制器上有一個(gè)Edit of Action。當(dāng)我第一次看到表單來更改頁面的詳細(xì)信息時(shí),所有內(nèi)容都很好地加載(綁定到“MyCmsPage”對(duì)象)。然后,我單擊一個(gè)按鈕,為MyCmsPage對(duì)象的某個(gè)字段(MyCmsPage.SeoTitle)生成一個(gè)值。它生成正常并更新對(duì)象,然后我返回動(dòng)作結(jié)果與新修改的頁面對(duì)象,并期望相關(guān)的文本框(使用渲染<%= Html.TextBox("seoTitle", page.SeoTitle)%>)更新...但是它顯示了加載的舊模型的值。我通過使用來解決它,ModelState.Clear()但我需要知道它為什么/如何工作所以我不只是盲目地做。的PageController:[AcceptVerbs("POST")]public ActionResult Edit(MyCmsPage page, string submitButton){     // add the seoTitle to the current page object     page.GenerateSeoTitle();     // why must I do this?     ModelState.Clear();     // return the modified page object      return View(page);  }ASPX:<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyCmsPage>" %> ....        <div class="c">             <label for="seoTitle">                 Seo Title</label>             <%= Html.TextBox("seoTitle", page.SeoTitle)%>            <input type="submit" value="Generate Seo Title" name="submitButton" />         </div>
查看完整描述

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è)“功能”,是嗎?



查看完整回答
反對(duì) 回復(fù) 2019-09-05
?
牧羊人nacy

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è)想法。



查看完整回答
反對(duì) 回復(fù) 2019-09-05
?
萬千封印

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”更改為要重置的字段的名稱


查看完整回答
反對(duì) 回復(fù) 2019-09-05
  • 3 回答
  • 0 關(guān)注
  • 946 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)