asp.net mvc如何决定加载哪个视图

时间:2010-08-24 14:06:11

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

我正在尝试构建一个asp.net mvc应用程序,它将使用以下网址:

  

/控制器/ [号码] /动作/编号

我已经让它总是打电话给我的控制器并传递NumberId罚款...... 但是我现在想要根据Number返回不同的视图 我可以选择:

if([Number] == 1) { return View("ViewName");}
if([Number] == 2) { return View("ViewName2");}

然而,我反而想知道是否有办法更改核心,以便不是在~/Views/controller/action.aspx搜索我可以拥有自己的方法,对Number进行一些检查然后传递给虚拟文件提供程序是一个不同的路径

希望这是有道理的!

3 个答案:

答案 0 :(得分:0)

您可能希望查看使用“操作过滤器属性”修饰控制器方法。

然后,您可以在“操作过滤器属性”中执行一些特殊操作。

或者,您可以将Number传递给Model对象,然后让模型Object返回正确的View路径。

无论哪种方式,你试图从控制器中保留太多逻辑的本能都是合理的,特别是如果[Number]在某种程度上是一个商业问题而不是视角问题。

答案 1 :(得分:0)

决定加载哪个视图,具体取决于输入参数是控制器任务。你可以编写自己的视图引擎。

但是返回想要返回的视图的完整路径会更容易。

return View("~/myviews/ViewName3.aspx");

这将从给定目录呈现ViewName3。

答案 2 :(得分:0)

您需要查看/ google创建自定义视图引擎。

根据事情的声音,您可能只想扩展内置WebFormViewEngine,只需覆盖位置和.FindView()方法。

HTHS,
查尔斯