Вызовите Actiona из DARGEB, затем продолжим действий

StackOverflow https://stackoverflow.com/questions/4074626

  •  28-09-2019
  •  | 
  •  

Вопрос

Я думаю, что я неправильно понимаю что-то о 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"); не работает. Так как мне это сделать? Я думаю, что у меня могут быть все контроллеры, которые нужно использовать действие (), наследующуюся от Contreamerb, но это чувствует действительно плохой способ сделать это. Пожалуйста помоги!

Это было полезно?

Решение

Вы должны вернуть ActionResult от RedirectToAction ()

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, чтобы иметь возможность что-либо выполнить на нем, так что вы пытаетесь сделать, просто не будет работать без взломать

Я думаю, однако есть 2 метода, чтобы лучше получить результаты, которые я думаю, вы после:

1) Сделайте класс «ControlLerBase» и у всех контроллеров наследовать от него, а не из «контроллера», то любой общий код, который вы можете добавить в базовый класс (в качестве статического метода, возможно), а затем все контроллеры могут получить доступ к нему в качестве элемента хорошего и легко.

2) Как MVC сделает прямой DLL, вы можете добавить в новые классы, поскольку вам нужно, например, добавьте новую папку проекта, например, «Globals», добавьте новый класс файл под названием «FUNCS», и там у вас есть статический лимитек, который вы можете получить доступ к из любой точки, функции func.sendemail (); так далее

Если я с Марка ОК! счастливое кодирование в любом случае хе

Я ввел контроллеры с заводским методом от фабрики контроллера в качестве делегата (Func CreateController) и использовал их для создания подконтроллеров, таких как в этом обстоятельство. Там много способов достичь вашей цели, но я думаю, что это может быть быстрый способ получить то, что вы хотите работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top