我认为我误解了有关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()继承的控制器,但这感觉确实是一种糟糕的方法。请帮忙!

有帮助吗?

解决方案

您必须从redirecttoaction()返回Action Result

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

如果您希望重定向至重定向到操作,则需要做的事情。在澄清“不起作用”对您意味着什么之后,我认为您应该让所有控制器都从基础上继承。那是一种非常标准的方法。

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

        Action();

        // CARRY ON with more code
    }
}

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

其他提示

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

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

1)制作一个“控制器”类,并使所有控制器都从中继承而不是从“控制器”中继承,然后您可以将任何共享代码添加到基类中(也许是静态方法),然后所有控制器都可以作为成员nice访问它而且容易。

2)由于MVC会直接添加DLL,因此您可以根据需要添加新类,例如添加一个新的项目文件夹,例如“ Globals”添加一个名为'funcs'的新类文件,并且您有一个静态lib,您可以访问它从任何地方,funcs.sendemail(); ETC

如果我不在标记上!无论如何,开心的编码

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top