Вернуть вид из внешнего класса - PullRequest
0 голосов
/ 26 июня 2018

Я хочу выбрать между несколькими клиентами, прежде чем возвращать представление в ASP.NET Core MVC.

Итак, пусть будет HomeController со следующим кодом:

public class HomeController : Controller
{
    public virtual IActionResult Index()
    {
        return View();
    }
}

Теперь у меня несколько клиентов, и я хочу решить, какое представление будет возвращено. Но не в этом месте, поэтому я хочу написать это в другом файле.

Итак, мой вопрос, возможно ли что-то подобное:

public class HomeController : Controller
{
    public virtual IActionResult Index()
    {
        ViewChooser vc = new ViewChooser();
        return vc.GetNextView();
    }
}

public class ViewChooser
{
    public IActionResult GetNextView()
    {
        // do some stuff and then..
        return View("aaaa");
    }
}

Класс «ViewChooser» не наследуется от контроллера, поэтому я не могу просто написать return View () .

Причина, по которой я хочу, чтобы это работало так, заключается в том, что я хочу выбирать между несколькими рабочими процессами без изменения URL-адреса. (В противном случае области были бы возможным решением моей проблемы.) Поэтому, если клиент А звонит www.myserver.com / function1 , он получает другую функцию и выглядит как клиент Б.

Есть идеи? Или я далеко от решения?

Привет

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Если у вас фиксированное количество клиентов, скажем «5 клиентов», вы можете создать 5 разных методов ActionResult, которые будут возвращать 5 разных представлений. После этого вы можете создать собственный атрибут, в котором вы будете писать логику для получения информации о клиенте. Вы можете поместить этот пользовательский атрибут в каждый метод ActionResult.

0 голосов
/ 26 июня 2018

Один из вариантов: ViewChooser наследуется от Controller. В конце концов, он пытается вернуть представление, которое делает контроллер.

В качестве альтернативы просто ViewChooser возвращает имя представления:

public class ViewChooser
{
    public string GetNextView()
    {
        // do some stuff and then..
        return "aaaa";
    }
}

И ваш контроллер может использовать это для выбора вида:

public class HomeController : Controller
{
    public virtual IActionResult Index()
    {
        ViewChooser vc = new ViewChooser();
        return View(vc.GetNextView());
    }
}

Это будет означать, что GetNextView() всегда должен возвращать правильное именованное представление, а не другой вид IActionResult. Но отсоединит ViewChooser от инфраструктуры MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...