Asp.net MVC ModelState.Clear

 2023-02-17    373  

问题描述

任何人都可以让我在ASP.NET MVC中的ModelState的角色(或链接)给我一个简洁的定义.特别是我需要知道在哪些情况下,需要或希望调用ModelState.Clear().

bit开放结束huh …对不起,我认为如果告诉你我在大小做什么:

Asp.net MVC ModelState.Clear

我在一个名为”页面”的控制器上有一个操作.当我第一次看到表单更改页面的详细信息时,所有内容都加载Fine(绑定到”MyCMSpage”对象).然后我单击一个按钮,为一个mycmspage对象的字段(MyCmsPage.SeoTitle)生成值.它会生成精确并更新对象,然后我将动作结果与新修改的页面对象返回,并期望更新相关的文本框(使用<%= Html.TextBox(“seoTitle”, page.SeoTitle)%>呈现)…但是alas它显示了从旧模型中显示的值加载.

我通过使用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>

推荐答案

我认为是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); 
}

按预期工作.

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

其他推荐答案

更新:

  • 这不是一个错误.
  • 请停止返回View()从邮政行动.使用 PRG 而是重定向到Action是成功的.
  • 如果是从帖子操作中返回View(),请为表单验证执行,并按照 MVC设计使用内置的助手.如果你这样做,那么你不应该需要使用.Clear()
  • 如果您正在使用此操作返回ajax for a spa ,使用a Web API控制器并忘记ModelState,因为您不应该使用它.

旧答案:

MVC中的模型主要用于描述模型对象的状态,主要是与该对象是否有效. 本教程应该解释很多.

一般来说,您不应该清除ModelState,因为它是由MVC引擎为您维护的.在试图遵守MVC验证最佳实践时,手动清除它可能会导致不期望的结果.

似乎您正在尝试为标题设置默认值.当模型对象被实例化(域层或在对象本身 – 不可分割的CTOR中)时,应该完成这一点,因此它在第1次或完全在客户端(通过AJAX或其他东西)下降到页面因此,它看起来好像用户输入它,它会返回发布的表单集合.有些方法如何在接收表单集合上添加此值(在Post Action//编辑中)导致此奇异行为可​​能导致.Clear() 出现为您工作.相信我 – 你不想使用清晰.尝试其他一个想法.

其他推荐答案

如果要清除单个字段的值,那么我发现以下技术有用.

ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture));

注意:
将”key”更改为要重置的字段的名称.

以上所述是小编给大家介绍的Asp.net MVC ModelState.Clear,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34208.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。