我想在多个客户端之间进行选择,然后再在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的身份查看。
有什么想法吗?还是我远离解决方案?
致谢
答案 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方法上。