如何在不使用EntityFramework保存到数据库的情况下跨ASP.NET请求保存状态?

时间:2012-12-10 13:58:43

标签: c# asp.net entity-framework webforms

我正在开发一个CRUD ASP.NET WebForms Web应用程序,该应用程序由用户填写数据的几个页面组成。我的客户端不希望在页面之间存储实体,直到用户在最后一页上单击“完成”(出于各种原因)。有什么选项可以在页面之间传播填充的数据,哪些是最不好的?从我的阅读中我已经看到可以使用ViewState和Server.Transfer。任何其他选项,最好使用较少的魔术字符串和更多类型安全数据绑定到实体对象?

4 个答案:

答案 0 :(得分:2)

您可以在Session中存储客户端应用程序中使用的所有对象,然后当用户单击完成时,将这些对象发送到服务/方法,您可以将它们转换为实体,然后将它们提交到数据库

答案 1 :(得分:2)

使用ViewState会大大增加您发送的数据量,因为所有Viewstate数据都被序列化为表单中的隐藏输入,因此当您添加对象时,您的HTTP请求 - 反应将显着增长。

这真的没有神奇的子弹。如果您的数据不是太复杂,我会将值存储在查询字符串中。如果您的对象变得越来越复杂,并且您希望保持类型安全,我会使用Session,但请记住自己清理!

另一个选择是使用MVC范例,并使用隐藏输入以自己的形式存储值。这意味着如果用户在中途发出错误但你的查询字符串保持清洁,则无需担心会话清理。

认为这是你的所有选择, querystring viewstate(不要这样做) session 隐藏变量

好的,所以你必须对你的数据进行seraialise,这样你就无法保持上下文。这不是可序列化的,所以上面是你的选择:

他们每个人都有正面和负面的,

  • Viewstate(无用且易于使用)
  • Querystring(对大型数据集有效且不可行且可编辑)
  • 会话(添加服务器负载并需要清理但允许您仅在服务器上保留数据)
  • 隐藏变量(对用户隐藏但比viewstate更高效,每个属性需要大量隐藏输入)

接受你的选择!

答案 2 :(得分:1)

使用MemCached 互联网上有很多例子 试试这个:
Implementing Distributed Caching using Memcached

答案 3 :(得分:0)

不确定我做错了什么,但我的 ASP Web API 控制器没有可用的会话状态?我这样做了: (1) 转到定义该静态类的 WebApiConfig 文件,因为我想要一些在我的控制器被调用之前运行一次的代码块。在那里我添加了一个公共静态列表变量 myList。 (2) 然后在 Register 方法中,我完成了该列表的定义。 (3) 现在在我的控制器中,我有一个持久的(只要我不重新启动应用程序)列表,我也可以读取和写入。

public static class WebApiConfig
{
    public static List<Note> myList;
    public static void Register(HttpConfiguration config)
    {
        myList = new List<Note>();
        myList.Add(new Note { Id = "1", Subject = "Wake up", Details = "Set alarm of 7:00 am and get out of bed." });
        myList.Add(new Note { Id = "2", Subject = "Eat breakfast", Details = "Eat a healthy breakfast." });
        myList.Add(new Note { Id = "3", Subject = "Go to work", Details = "Get to work before 9:00 am." });

        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();
         ... more code

然后在控制器中

public Note Save(Note newNote)
{
    WebApiConfig.myList.Add(newNote);
    return newNote;
}
相关问题