从外部类返回视图

时间:2018-06-26 11:18:54

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

我想在多个客户端之间进行选择,然后再在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的身份查看。

有什么想法吗?还是我远离解决方案?

致谢

2 个答案:

答案 0 :(得分:1)

一种选择是让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框架脱钩。

答案 1 :(得分:0)

如果您有固定数量的客户端,请说“ 5个客户端”,则可以创建5个不同的ActionResult方法,这些方法将返回5个不同的视图。之后,您可以创建一个自定义属性,在其中编写用于提取客户信息的逻辑。您可以将此自定义属性放在每个ActionResult方法上。