我正在开发一个CRUD ASP.NET WebForms Web应用程序,该应用程序由用户填写数据的几个页面组成。我的客户端不希望在页面之间存储实体,直到用户在最后一页上单击“完成”(出于各种原因)。有什么选项可以在页面之间传播填充的数据,哪些是最不好的?从我的阅读中我已经看到可以使用ViewState和Server.Transfer。任何其他选项,最好使用较少的魔术字符串和更多类型安全数据绑定到实体对象?
答案 0 :(得分:2)
您可以在Session
中存储客户端应用程序中使用的所有对象,然后当用户单击完成时,将这些对象发送到服务/方法,您可以将它们转换为实体,然后将它们提交到数据库
答案 1 :(得分:2)
使用ViewState
会大大增加您发送的数据量,因为所有Viewstate
数据都被序列化为表单中的隐藏输入,因此当您添加对象时,您的HTTP请求 - 反应将显着增长。
这真的没有神奇的子弹。如果您的数据不是太复杂,我会将值存储在查询字符串中。如果您的对象变得越来越复杂,并且您希望保持类型安全,我会使用Session
,但请记住自己清理!
另一个选择是使用MVC范例,并使用隐藏输入以自己的形式存储值。这意味着如果用户在中途发出错误但你的查询字符串保持清洁,则无需担心会话清理。
认为这是你的所有选择, querystring , viewstate(不要这样做), session 或隐藏变量
好的,所以你必须对你的数据进行seraialise,这样你就无法保持上下文。这不是可序列化的,所以上面是你的选择:
他们每个人都有正面和负面的,
接受你的选择!
答案 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;
}