我正在尝试构建一个asp.net mvc应用程序,它将使用以下网址:
/控制器/ [号码] /动作/编号
我已经让它总是打电话给我的控制器并传递Number
和Id
罚款......
但是我现在想要根据Number
返回不同的视图
我可以选择:
if([Number] == 1) { return View("ViewName");}
if([Number] == 2) { return View("ViewName2");}
然而,我反而想知道是否有办法更改核心,以便不是在~/Views/controller/action.aspx
搜索我可以拥有自己的方法,对Number
进行一些检查然后传递给虚拟文件提供程序是一个不同的路径
希望这是有道理的!
答案 0 :(得分:0)
您可能希望查看使用“操作过滤器属性”修饰控制器方法。
然后,您可以在“操作过滤器属性”中执行一些特殊操作。
或者,您可以将Number传递给Model对象,然后让模型Object返回正确的View路径。
无论哪种方式,你试图从控制器中保留太多逻辑的本能都是合理的,特别是如果[Number]在某种程度上是一个商业问题而不是视角问题。
答案 1 :(得分:0)
决定加载哪个视图,具体取决于输入参数是控制器任务。你可以编写自己的视图引擎。
但是返回想要返回的视图的完整路径会更容易。
return View("~/myviews/ViewName3.aspx");
这将从给定目录呈现ViewName3。
答案 2 :(得分:0)