如何从不返回视图的不同项目调用控制器操作

时间:2013-03-03 16:52:28

标签: c# asp.net-mvc-3

我有两个项目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。 有没有办法做到这一点?

更清楚地想象你在一个类中有两个简单的方法

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

现在把它放在上下文中。是否可以这样做?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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

public EmptyResult Home()
  {
     Response.Redirect("http://YourDoimein.com/Controller/Action");
  }