【问题标题】:view state in ASP.NET MVC Application在 ASP.NET MVC 应用程序中查看状态
【发布时间】:2010-04-09 13:45:29
【问题描述】:

我已经读过asp.net MVC 应用程序中没有viewstate。 我正在做模型验证。现在,如果我的页面上有两个文本框,并且我正在对模型中的两个文本框进行必要的归档验证。通过单击按钮在服务器端完成此验证。我将填写一个文本框并单击提交按钮。它进行验证并返回结果说第二个字段是必需的。此时第一个文本框的值被保留。那么你能告诉我这个文本框是如何在回发后保留值的吗?

【问题讨论】:

  • 值在html中重新发出!?!

标签: asp.net asp.net-mvc


【解决方案1】:

没有“回发”。只有一个帖子。

  1. 服务器返回 HTML。
  2. 浏览器呈现它。
  3. 用户发布垃圾数据。
  4. 用户提交的所有数据都保存在Controller.ModelState 集合中。
  5. 如果出现验证错误,每个 ModelState 条目都会设置其 Errors 属性。
  6. 服务器查看垃圾数据。返回与 (1) 相同的页面除了,它包括用户提交的数据,好坏,以及废话数据的验证错误。
  7. 浏览器会呈现它。

当您调用Html.TextBox("someName", someValue) 时,文本框将包含someValue 除非"someName" 有一个ModelState 键,在这种情况下ModelState 的值是改为使用。原来默认数据(如果有)是这样显示的,但是出错后显示的是用户的数据。

【讨论】:

  • 用户发布垃圾数据 - 除非是开发者:)
  • 感谢大家的回答。模型状态如何在内部存储帖子之间的值?它使用临时数据还是任何其他方法???
  • 它没有。 ModelState 仅在POST 和您的应用程序响应之间的时间段内使用。然后就被遗忘了。
【解决方案2】:

阅读有关 ModelState 的信息。当您发布 http 表单时,值将存储在 ModelState 对象中,并在您使用 html 助手(Html.Label、Html.Hidden、Html.TextBox)再次生成表单时重用。

  1. 使用 Html.TextBox() 显示表单。
  2. 用户首次输入值。
  3. 表单已发布。
  4. ModelState 对象保存文本框值。
  5. 再次使用 Html.TextBox() 显示表单。方法查看 ModelState 并在第一次发布时再次设置其值。即使您提供新值,也会在 ModelState 对象中进行搜索。

【讨论】:

    【解决方案3】:

    视图是使用模型渲染的。如果您将相同的模型(带有 ModelState 错误)传递给视图,则验证失败时,它将使用使用 ModelState 错误呈现的额外验证消息重新填充相同的视图。

    【讨论】:

      【解决方案4】:

      文本框的值绑定到模型值。

      如果验证失败,页面将重新显示,其模型处于提交时的状态(即第一个文本框的值)并添加了任何模型状态错误。

      没有可播放的视图状态 ;-)

      【讨论】:

        【解决方案5】:

        如果您要回发到同一页面,启用视图状态实际上应该保留控件的值

        【讨论】:

        • MVC 背后的想法是分离关注点,不让您的业务逻辑与您的视图或 UI 混合,并使用测试方法创建一个易于测试的站点forums.asp.net/t/1215012.aspx
        猜你喜欢
        • 2012-08-06
        • 2021-11-08
        • 1970-01-01
        • 2023-03-29
        • 2010-11-06
        • 2012-02-02
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多