如何在MVC中保存临时数据

时间:2013-09-16 16:09:50

标签: c# session asp.net-mvc-4

我有三个班级

人员类

Public class Person
{
    public string PersonID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<Project> Projects { get; set; }
    public List<Contact> Contacts { get; set; }
}

项目类

Public class Project
{
    public string ProjectNo { get; set; }
    public string ProjectName { get; set; }
}

联系班级

Public class Contact
{
    public string ContactNo { get; set; }
    public string ContactName { get; set; }
}

我从网络服务获取关于Perosn的 Perosnal信息项目信息联系信息 (是PersonID)

我的主页上有四个TABS 项目联系完成< / strong>即可。
我可以在每个TABS中显示数据。

Probelm案例:
1)用户在 Perosnal信息页面中编辑信息并单击保存 2)然后编辑项目信息页面并单击保存 3)然后编辑联系信息并点击保存。
4)然后继续完成标签,然后点击完成修改

当用户在完成标签中点击完成编辑时,只有数据应保存在数据库中。

我的疑问是如何保存临时数据 MVC中是否存在Session之类的内容?

4 个答案:

答案 0 :(得分:1)

是的,您可以使用类似的内容将课程保存到会话中。

Session["name"] = yourObj;

答案 1 :(得分:0)

ASP.Net MVC仍然是一个ASP.Net应用程序,因此您可以使用Session。虽然我建议将其设置为无状态并改为在数据库中保存用户的进度。

答案 2 :(得分:0)

在此之前,我应该声明您不应该在会话中存储临时数据。但是:

首先我们定义接口:

public interface ISessionWrapper
{
    int SomeInteger { get; set; }
}

然后我们进行HttpContext实现:

public class HttpContextSessionWrapper : ISessionWrapper
{
    private T GetFromSession<T>(string key)
    {
        return (T) HttpContext.Current.Session[key];
    }

    private void SetInSession(string key, object value)
    {
        HttpContext.Current.Session[key] = value;
    }

    public int SomeInteger
    {
        get { return GetFromSession<int>("SomeInteger"); }
        set { SetInSession("SomeInteger", value); }
    }
}

然后我们定义我们的基本控制器:

public class BaseController : Controller
{
    public ISessionWrapper SessionWrapper { get; set; }

    public BaseController()
    {
        SessionWrapper = new HttpContextSessionWrapper();
    }
}

最后:

public ActionResult SomeAction(int myNum)
{           
    SessionWrapper.SomeInteger
}

答案 3 :(得分:0)

点击保存后点击个人信息页面即可:

Session [“personInfo”] = personInfoObj;

最后检索:

PersonInfoClass personInfoObj =(PersonInfoClass)Session [“personInfo”];

(同样,您也可以为其他页面执行此操作)