![](/img/trans.png)
[英]Trying to save an entity that has been stored in ASP.NET control state using 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 范式并使用隐藏输入以其自身的形式存储值。 这意味着如果用户中途出错,您无需担心清理会话,但它也可以保持您的查询字符串干净。
认为这就是您的所有选项, querystring , viewstate(don't do it) , session或hidden variables 。
好的,所以您必须序列化您的数据,因此您无法保留上下文。 这是不可序列化的,因此以上是您的选择:
他们每个人都有积极和消极的一面,
随你挑!
使用内存缓存。
互联网上有很多例子。
试试这个 :
使用 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.