1

我想我误解了一些关于 MVC 的东西。我正在尝试执行以下操作:

public class ControllerA : Controller
{
    public ActionResult Index()
    {
        // do code

        // perform action on ControllerB - something like:
        // RedirectToAction("Action", "ControllerB");

        // CARRY ON with more code
    }
}

public class ControllerB : Controller
{
    public void Action()
    {
        // do code
    }
}

显然RedirectToAction("Action", "ControllerB");行不通。那么我该怎么做呢?我想我可以让所有需要使用 Action() 的控制器都从 ControllerB 继承,但这感觉是一种非常糟糕的方法。请帮忙!

4

3 回答 3

3

您必须从 RedirectToAction() 返回 ActionResult

return RedirectToAction("Action", "ControllerB");

如果您希望 RedirectToAction 实际重定向到操作,则需要执行此操作。在您阐明“不起作用”对您意味着什么之后,我认为您应该让所有控制器都从基础继承。这是一种非常标准的方法。

public class ControllerA : ControllerB
{
    public ActionResult Index()
    {
        // do code

        Action();

        // CARRY ON with more code
    }
}

public class ControllerB : Controller
{
    public void Action()
    {
        // do code
    }
}
于 2010-11-02T03:01:48.463 回答
0

我已经将控制器工厂的工厂方法作为委托(Func CreateController)注入控制器,并使用它来创建子控制器,例如在这种情况下。有很多方法可以实现您的目标,但我认为这可能是获得您想要的工作的快速方法。

于 2010-11-02T07:44:58.443 回答
0

我相信您当前正在执行的控制器是该类的一个实例,因此您需要创建一个控制器 B 的实例才能在其上执行任何操作,因此如果没有黑客。

但是,我认为有两种方法可以更好地获得我认为您所追求的结果:

1)创建一个'ControllerBase'类并让所有控制器继承它而不是'Controller'然后您可以添加到基类中的任何共享代码(也许作为静态方法)然后所有控制器都可以作为成员访问它很容易。

2) 由于 MVC 将创建一个直接的 DLL,因此您可以根据需要添加新类,例如添加一个新项目文件夹,如“Globals”,添加一个名为“Funcs”的新类文件,然后您就有一个可以访问的静态库从任何地方,Funcs.SendEmail(); ETC

如果我不正常的话,好吧!无论如何,快乐的编码

于 2010-11-02T04:25:02.377 回答