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

本文关键字:调用 控制器 项目 返回 视图 | 更新日期: 2023-09-27 18:01:52

我有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 = "" });

,这是我的web项目控制器的动作:

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

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

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

执行此操作有两种方法。

:控制器中的动作就是简单的方法所以你可以直接调用它们你需要创建一个控制器实例然后调用你的方法:

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

The Good:仔细阅读如何将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();

如果你可以从其他项目调用controller,你可以直接使用Response。重定向(

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