如何才能有一个可以从不同控制器访问的对象?

时间:2013-01-07 13:51:26

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在使用ASP.Net MVC4,我自定义我的登录,这没关系,我想保存此对象USER,我可以从不同的控制器和不同区域访问。我试图将此对象定义为“静态”但我无法访问对象的值:

if (Servicio.ValidarUsuario())
            {
                string Mensaje = "";
                Models.AdmUsuario oAdmUsuario = new Models.AdmUsuario();
                oAdmUsuario.Au_codusuario = login.UserName;
                Servicio.RetornaEntidad<Models.AdmUsuario>(ref Mensaje, "admsis.adm_usuario", oAdmUsuario.getPk(), oAdmUsuario);
                ***Models.AdmUsuario.UserWeb = oAdmUsuario;***
                FormsAuthentication.SetAuthCookie(login.UserName, false);                 
                Session["Modulo"] = null;
                Session["Menu"] = null;
                return RedirectToAction("index", "raMainReclamo", new { area = "Reclamos" });
            }

在我定义的模型中:

public static AdmUsuario UserWeb;

但我无法获得价值。 您是否知道如何从不同区域的不同控制器访问对象的值?

1 个答案:

答案 0 :(得分:2)

您需要一种在请求之间存储对象的方法。您可以将对象放在会话内存中并将其拉出来。

{
    // Other Code
    Session["AdmUsuario"] = oAdmUsuario;
    return RedirectToAction("index", "raMainReclamo", new { area = "Reclamos" });
}

Reclamos地区的控制器

public class raMainReclamoController : Controller
{
    public ActionResult Index() {
         var oAdmUsuario = Session["AdmUsuario"] as Models.AdmUsuario;

         // Other Code
    }
}

但是,更标准的方法是将对象持久保存到数据库中,然后将其拉回。您可以阅读使用Entity Framework来访问sql数据库。我喜欢使用RavenDB进行存储,因为它可以很容易地保存对象。

**对评论的回应更新**

这只是伪代码,因为我不知道你用什么连接到postgres。

{
    // Other Code
    oAdmUsuario = postgresContext.Store(oAdmUsuario);
    postgresContext.SaveChanges();
    return RedirectToAction("index", "raMainReclamo", new { area = "Reclamos", id = oAdmnUsuario.Id });
}

Reclamos地区的控制器

public class raMainReclamoController : Controller
{
    public ActionResult Index(int id) {
         var oAdmUsuario = postgresContext.GetById<Models.AdmUsuario>(id);

         // Other Code
    }