【问题标题】:Mvc retain values after postback回发后 Mvc 保留值
【发布时间】:2017-02-11 19:44:43
【问题描述】:

我有一个简单的 TestController 类和 User 模型:

public class TestController : Controller
{
    public ActionResult TestAction()
    {
        return View();
    }

    [HttpPost]
    public ActionResult TestAction(User user)
    {
        return View();
    }
}

public class User
{
    public int Id { get; set; }

    public string Name { get; set; }

    public int Age { get; set; }
}

这是我的表格:

据我所知,MVC 是无状态的,它没有视图状态的概念。但是在将数据发布到我的控制器并返回视图后,我的所有数据都在那里。我希望空字段,但它们都填充了发布的数据。我不明白 MVC 是如何知道回发后的值的?

【问题讨论】:

  • 当您从 HttpPost 返回 View 时,假设您正在处理错误情况。它会将发布的数据保留在ModelState中,并在页面上重新填写数据,以便用户更正。
  • 如果您在发布后想要一个空表单,则在返回视图时包含一个新的用户对象。
  • MVC 将模型传回给控制器,如果将模型传回给视图,则所有数据都会保留。在回发时,您确定模型是否有效,并执行适当的操作。如果您希望向用户返回一个空视图,那么您必须转换一个新模型,或者在将数据返回给视图之前将字段清空。
  • @Omer K - “你必须忘掉你所学的”。我会放弃将其与 ViewState 关联起来。这是简单的请求和回复,您的控制器使用相同的值回复,这与持久性或有状态性不同。
  • 奥马尔,我同意臭臭的。数据没有持久化,也没有“视图状态”。数据正在从服务器移动到视图并返回。您期望空字段...作为程序员,您必须清空它们,或者根据手头项目的需要填充它们。

标签: c# asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

你需要使用 ModelState.Clear()

public class TestController : Controller
{
    public ActionResult TestAction()
    {
        return View();
    }

    [HttpPost]
    public ActionResult TestAction(User user)
    {
        ModelState.Clear()
        return View();
    }
}

【讨论】:

    【解决方案2】:

    @stephen.vakil

    当您从 HttpPost 返回视图时,假设您正在处理错误情况。它将已发布的数据保留在 ModelState 中,并在页面上重新填充数据,以便用户进行更正。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      相关资源
      最近更新 更多