gpt4 book ai didi

asp.net-mvc - Asp.net MVC ModelState.Clear

转载 作者:行者123 更新时间:2023-12-03 04:39:26 25 4
gpt4 key购买 nike

任何人都可以给我一个关于 ModelState 在 Asp.net MVC 中的作用的简洁定义(或链接)。我特别需要知道在什么情况下有必要或需要调用ModelState.Clear() .

有点开放式的嗯...抱歉,我想如果告诉你我实际上在做什么可能会有所帮助:

我在名为“Page”的 Controller 上有一个编辑操作。当我第一次看到更改页面详细信息的表单时,一切都加载正常(绑定(bind)到“MyCmsPage”对象)。然后,我单击一个按钮,为 MyCmsPage 对象的字段之一生成值 ( MyCmsPage.SeoTitle )。它生成良好并更新对象,然后我使用新修改的页面对象返回操作结果,并期望更新相关文本框(使用 <%= Html.TextBox("seoTitle", page.SeoTitle)%> 渲染)......但可惜它显示了旧模型中的值已加载。

我已经通过使用 ModelState.Clear() 解决了这个问题但我需要知道它为什么/如何起作用,这样我才不会盲目地这样做。

页面 Controller :

[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>

最佳答案

我认为这是 MVC 中的一个错误。今天我在这个问题上挣扎了几个小时。

鉴于此:

public ViewResult SomeAction(SomeModel model) 
{
model.SomeString = "some value";
return View(model);
}

View 使用原始模型进行渲染,忽略更改。所以我想,也许它不喜欢我使用相同的模型,所以我尝试了这样的:

public ViewResult SomeAction(SomeModel model) 
{
var newModel = new SomeModel { SomeString = "some value" };
return View(newModel);
}

View 仍然以原始模型呈现。奇怪的是,当我在 View 中放置断点并检查模型时,它的值发生了变化。但响应流具有旧值。

最终我发现了与您所做的相同的工作:

public ViewResult SomeAction(SomeModel model) 
{
var newModel = new SomeModel { SomeString = "some value" };
ModelState.Clear();
return View(newModel);
}

按预期工作。

我不认为这是一个“功能”,是吗?

关于asp.net-mvc - Asp.net MVC ModelState.Clear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1775170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com