2011-05-20 164 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等来做这个

相关问题