首页 > 解决方案 > 从外部类返回视图

问题描述

在 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”类不是从 Controller 继承的,所以我不能只写return View()

我希望它像这样工作的原因是因为我想在不更改 URL 的情况下在多个工作流之间进行选择。(否则区域可能是我的问题的解决方案。)因此,如果客户 A 调用www.myserver.com/function1,他将获得另一个功能并以客户 B 的身份查看。

有任何想法吗?还是我离解决方案还很远?

问候

标签: asp.net-mvcasp.net-core-mvc

解决方案


一种选择是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 框架中解耦。


推荐阅读