2011-05-20 102 views
0

所以我有這樣的:如何共享單個控制器動作之間的數據

public ActionResult ViewForum(int ForumID) 
    { 
     _frmSrv = new ForumService(); 
     _roleSrv = new RoleService(); 
     //_userAccess = new UserAccess(); 
     var modelView = _frmSrv.GetForumIndexView(ForumID); 
     TempData[CurrentUser.Name] = _roleSrv.GetUserAccessForForum(CurrentUser, ForumID); 
     modelView.UserAccess = TempData[CurrentUser.Name] as UserAccess; 
     return View(modelView); 
    } 

這:

public ActionResult ViewThread(int ThreadID) 
    { 
     _postSrv = new PostService(); 
     var modelView = _postSrv.GetThreadIndexView(ThreadID); 
     modelView.UserAccess = TempData[CurrentUser.Name] as UserAccess; 
     return View(modelView); 
    } 

您probaly已經猜到我想從一個動作到另一個通過UserAccess。 有沒有辦法做到這一點?

+1

你爲什麼要通過它?是否用於認證和授權?如果是這樣,那麼這個模型在文檔和博客中都有很好的描述。 – rboarman 2011-05-20 17:51:52

+0

UserAccess用於檢查用戶角色,在論壇上是否具有特定權限,如讀取,發佈等。 – 2011-05-20 18:02:35

回答

3

ASP.NET MVC中的操作是無狀態的,這意味着操作需要爲每個請求傳遞所需的所有信息。您可以執行以下操作:

public ActionResult ViewThread(int ThreadID, int ForumID) 
{ 
    _postSrv = new PostService(); 
    var modelView = _postSrv.GetThreadIndexView(ThreadID); 
    modelView.UserAccess = _roleSrv.GetUserAccessForForum(CurrentUser, ForumID) as UserAccess; 
    return View(modelView); 
} 

如果可以僅使用ThreadID獲取ForumID,則不需要更改方法簽名。

+0

是的,我後來這樣做了,但我想避免它。 無論如何,我認爲沒有其他辦法。 – 2011-05-20 18:04:19

0

asp.net mvc仍然是asp.net,你可以使用session,cookies等來做這個