2013-01-07 32 views
0

我正在與ASP.Net MVC4,我自定義我的登錄,這是好的,我想保存這個對象的用戶,我可以訪問不同的控制器和不同的地區。我試圖定義這個對象是「靜態」的,但我不能存取權限對象的值:我怎樣纔能有一個可以從不同的控制器訪問的對象?

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; 

但我不能獲得價值。 你有什麼想法,我如何從不同區域的不同控制器訪問對象的值?

回答

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 
    } 
} 

然而,更標準的做法是堅持對象到數據庫,然後將其退了出去。你可以閱讀使用實體框架來訪問一個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 
    } 
+0

嗨佈雷特,我使用PostgreSQL 9.0數據庫,我們不使用實體框架。使用會話是一個好習慣?還是有另一種方法不使用會話或靜態變量? – raranibar

+0

Raranibar ...你需要多長時間才能獲得這些信息?有很多方法可以讓請求之間的對象保持活動狀態,但如果這是你想要的長時間的事情,那麼我肯定會將它保存到數據庫中。 – BenjaminPaul

+0

好的做法真的取決於你在做什麼。我會在會話中存儲一個對象嗎?不可以。靜態變量不是答案,因爲一旦您向客戶端發送響應,該值就會被清除。您需要將對象存儲在第一個Controller Action中的Postgres中,然後將其拉出。我將用一些僞代碼編輯我的答案。 –

相關問題