谁能给我一个关于 ModelState 在 Asp.net MVC 中的作用的简洁定义(或者一个链接)。我特别需要知道在什么情况下有必要或需要打电话ModelState.Clear()
.
有点开放式结局吧...抱歉,我认为告诉您我实际上在做什么可能会有所帮助:
我在名为“Page”的控制器上有一个编辑操作。当我第一次看到更改页面详细信息的表单时,一切都加载正常(绑定到“MyCmsPage”对象)。然后,我单击一个按钮,为 MyCmsPage 对象的字段之一生成一个值(MyCmsPage.SeoTitle
)。它生成良好并更新对象,然后我使用新修改的页面对象返回操作结果,并期望相关文本框(使用渲染<%= Html.TextBox("seoTitle", page.SeoTitle)%>
)要更新...但可惜它显示了已加载的旧模型的值。
我已经通过使用解决了这个问题ModelState.Clear()
但我需要知道它为什么/如何起作用,这样我才不会盲目地这样做。
页面控制器:
[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);
}
视图使用原始模型渲染,忽略更改。所以我想,也许它不喜欢我使用相同的模型,所以我尝试这样:
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);
}
按预期工作。
我不认为这是一个“功能”,是吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)