Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从外部类返回视图_Asp.net Mvc_Asp.net Core Mvc - Fatal编程技术网

Asp.net mvc 从外部类返回视图

Asp.net mvc 从外部类返回视图,asp.net-mvc,asp.net-core-mvc,Asp.net Mvc,Asp.net Core Mvc,在ASP.NET Core MVC中返回视图之前,我想在多个客户端之间进行选择 因此,假设有一个具有以下代码的HomeController: public class HomeController : Controller { public virtual IActionResult Index() { return View(); } } 现在我有多个客户端,我想决定返回哪个视图。但不是在这个地方,所以我想把它写在另一个文件中 所以我的问题是,有没有这

在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的身份查看

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


关于

一个选项是让
视图选择器
控制器
继承。毕竟,它试图返回一个视图,而这正是控制器所做的

或者,只需让
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
。但是会将视图选择器与MVC框架分离。

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