【问题标题】:Maintaining viewstate in Asp.net mvc?在 Asp.net mvc 中维护视图状态?
【发布时间】:2009-08-16 22:51:23
【问题描述】:

使用网络表单的主要原因之一是能够轻松维护视图状态。我想构建一个 asp.net mvc 应用程序,那么我有哪些选项来维护视图状态?

亲切的问候

【问题讨论】:

  • @Robert 如果您不同意,最好讨论重复问题,而不是简单地覆盖编辑。
  • 如果您有大量内容要添加,请继续。否则,我已经发布了关于重复的评论。
  • @Robert 重复项将被关闭,不予评论。请参阅常见问题解答。
  • 创始人已经在他们的博客上明确了编辑的目的。它旨在进行大量编辑,而不是大型交通标志。

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


【解决方案1】:

ASP.NET MVC 不使用传统意义上的 ViewState(将控件的值存储在网页中)。相反,控件的值被发布到控制器方法。调用控制器方法后,如何处理这些值取决于您自己。

ASP.NET MVC 会将控件的值保留足够长的时间,以便您验证它们并(如果需要)将它们往返返回到您的页面以进行编辑或更正。如果控件通过验证,您可以将它们持久化到数据库或其他数据存储中,它们将可用于后续 GET 请求。

【讨论】:

    【解决方案2】:

    您可以通过使用MVC3Futures project在视图中序列化模型来模仿视图状态

    您所要做的就是序列化模型并在视图中对其进行加密。

    @Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned)
    

    并在控制器中添加反序列化属性。

    public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer)
    

    【讨论】:

    • ASP.NET中的ViewState与MVC的Model无关。 ViewState 包含控件状态;不是模型对象的值。
    • 这已在 MVC 5 Futures 中删除,但您可以使用 MvcSerializer.Serialize 代替。见stackoverflow.com/questions/25828553/…
    【解决方案3】:

    由于其将业务层与表示层分开的基本设计,MVC 框架不允许通过 HTTP 保留状态,

    然而 Cookies、Serializable 类、ViewData 和 ViewBag 是在 MVC 中保存状态的好方法。

    【讨论】:

      【解决方案4】:

      如果您想制作例如向导样式的表单,您可以创建一个 Serializable 类来保留视图状态:

      [Serializable]
      public class MyWizard
      {
          public string Field1 { get; set; }
          public string Field2 { get; set; }
      }
      

      然后您可以序列化这个类并以与使用 ViewState 类似的方式使用它(作为表单中的隐藏字段)。

      【讨论】:

        猜你喜欢
        • 2013-01-27
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多