【问题标题】:What are the best practices to persist`Conversational state' in ASP.NET MVC applications?在 ASP.NET MVC 应用程序中保持“对话状态”的最佳实践是什么?
【发布时间】:2010-05-02 05:41:47
【问题描述】:

最终的解决方法是什么?)

所需的场景是:

  1. 多步骤表单。
  2. 如果页面上有标签,标签应保持其“视图状态”
  3. 无论导航用户选择了什么,都不应影响(更恰当地说,bother)会话状态管理。

这些只是几个方面,但我发现它们非常实用。

【问题讨论】:

  • 什么是“会话状态”?
  • 这是当前用户和网络应用对话的信息。我的意思是,这包括任何东西:从用户的身份,通过当前交互的有效模式,到视觉元素的期望状态(在 ASP.NET WebForms 中也称为“视图状态”)

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


【解决方案1】:

我曾经在 Asp.Net MVC 中使用过向导类型的表单,在这种情况下最好的办法是使用 Model/ModelBinding 来跟踪表单输入。

我们可以创建一个控制器动作链(针对每个步骤),每个动作的输出模型作为下一个步骤(动作)的输入模型。

例如,如果我们有创建用户的三个步骤。然后 UserController 可以对每个步骤进行操作。

public ActionResult Step1()
{
   User user = new User();
   return View(user);
}

[Post]
public ActionResult Step1(User user)
    {
       //perform business validation
        RedirectToAction<UserController>(u => Step2(user)); 

    }

在此 Step2 操作之后,将接管来自 Step1 的修改用户,并可以呈现自己的视图等。

【讨论】:

    【解决方案2】:

    您可能还想查看http://blog.maartenballiauw.be/post/2009/10/08/Leveraging-ASPNET-MVC-2-futures-ViewState.aspx。 MVC Futures 中有一个 Html.Serialize() 助手。这篇文章将其称为轻量级 Viewstate,但实际上它只是围绕“序列化此对象并将 base64 字符串存储在隐藏的表单字段中”的美化包装。如果您需要将状态与单个页面而不是整个 Session 相关联,则此帮助程序可能适合您的需要。

    【讨论】:

      【解决方案3】:

      不确定“解决方法”,但您是否考虑过使用 AJAX 和 jQuery?根据您列出的要求,两者都是合适的。

      【讨论】:

      • 希望我从不使用 AJAX 和 JavaScript,但 +1 以提及标准后备选项 :)
      猜你喜欢
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多