繁体   English   中英

如何在 ASP.NET 中跨实体请求保存状态而不使用 EntityFramework 保存到数据库?

[英]How to save state across requests for an entity in ASP.NET without saving to database using EntityFramework?

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

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

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

这真的没有灵丹妙药。 如果您的数据不太复杂,我会将值存储在查询字符串中。 如果您的对象变得越来越复杂和大,并且您想保持类型安全,我会使用Session ,但请记住自己清理!

另一种选择是使用 MVC 范式并使用隐藏输入以其自身的形式存储值。 这意味着如果用户中途出错,您无需担心清理会话,但它也可以保持您的查询字符串干净。

认为这就是您的所有选项, querystringviewstate(don't do it)sessionhidden variables

好的,所以您必须序列化您的数据,因此您无法保留上下文。 这是不可序列化的,因此以上是您的选择:

他们每个人都有积极和消极的一面,

  • Viewstate(低效但易于使用)
  • 查询字符串(对于大型数据集有效但不实用且可编辑)
  • 会话(增加服务器负载并需要清理但只允许您在服务器上保留数据)
  • 隐藏变量(对用户隐藏但比视图状态更有效,每个属性需要大量隐藏输入)

随你挑!

使用内存缓存。
互联网上有很多例子。
试试这个 :
使用 Memcached 实现分布式缓存

不确定我做错了什么,但我的 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM