1

我有 2 个项目 MVCMembership 和使用会员资格的主 Web 项目,我需要从我的主 Web 项目的控制器中的会员项目中的控制器中获取一些日期。这就是我尝试的:这是来自我的会员控制器

public ViewResult Index(int? index)
    {
        if (Roles.IsUserInRole("Group Admin"))
        {
            string[] roles = Roles.GetRolesForUser();

            var GroupUsers = RedirectToAction("UsersInGroup", "Account", new { Area = "" });

这是我的网络项目控制器中的操作:

public MembershipUserCollection UsersInGroup()
    {
        var groupResultSet = db.aspnet_UsersInGroups.Where(u => u.UserID == (Guid)Membership.GetUser().ProviderUserKey);
        var group = groupResultSet.Single().aspnet_Group;
        return group.Users;
    }

所以这不起作用,因为 RedirectToAction 返回 RedirectToRouteResult。有没有办法做到这一点?

更清楚地说,假设您在一个类中有 2 个简单的方法

public somthing Method1()
{
    //doing something
    //call some other method
    var parm = Method2();
    //doing something whit parm
    return somethingelse;
}

public something Method2()
{
    //doing something
    return parm;
}

现在把它放在上下文中。这可能吗?

4

2 回答 2

1

有两种方法可以执行此操作。

坏处:控制器中的操作只是方法,因此您可以直接调用它们,您需要创建控制器的实例,然后调用您的方法:

public ViewResult Index(int? index)
{
    if (Roles.IsUserInRole("Group Admin"))
    {
        string[] roles = Roles.GetRolesForUser();
        var accountController = new AccountController()
        var GroupUsers = accountController.UsersInGroup();

优点:阅读有关将 IOC 容器连接到 MVC 应用程序中的内容,从控制器中删除所需的方法并将其放入服务中,然后将服务注入到控制器中。

 public YourController:Controller
 {
     private IMembershipService  _membership 
     public YourController(IMembershipService membership)
     {
         _membership = membership;
     } 

     public ViewResult Index(int? index)
     {
       if (Roles.IsUserInRole("Group Admin"))
       {
           string[] roles = Roles.GetRolesForUser();

           var GroupUsers = _membership.UsersInGroup();
于 2013-03-04T21:15:34.690 回答
0

如果您可以从其他项目调用控制器,则可以使用 Response.Redirect(

public EmptyResult Home()
  {
     Response.Redirect("http://YourDoimein.com/Controller/Action");
  }
于 2013-03-03T17:00:55.280 回答