在views目录下,有子目录.这些子目录中有视图.我假设子目录映射到控制器,控制器作用于其子目录中包含的视图.
是否出现了对这些目录中包含哪些类型的视图的期望?例如,每个目录的默认页面应该是index.aspx吗?页面是否应遵循命名约定,如Create [controller] .aspx,List [controller] .aspx等?或者没关系?
解决方法
让我们看看最简单的控制器动作:
public ActionResult NotAuthorized() { return View(); }
由于在调用View()时未指定视图名称,因此框架将假定视图文件名与Action名称相同.该框架有一个名为ViewEngine的类型,它将提供扩展.默认的ViewEngine是WebFormViewEngine,它将采用该名称并附加.aspx.因此,在这种情况下,完整的文件名将是NotAuthorized.aspx.
但是在哪个文件夹中会找到该文件?同样,ViewEngine提供了这些信息.使用WebFormViewEngine,它将查看两个文件夹:〜/ Views / Shared和〜/ Views / {controller}
因此,如果您的控制器被称为AccountController,它将在〜/ Views / Account中查找
但有时您可能不想遵守这些规则.例如,两个不同的操作可能会返回相同的视图(使用不同的模型或其他内容).在这种情况下,如果您在操作中明确指定视图名称:
public ActionResult NotAuthorized() { return View("Foo"); }
请注意,对于WebFormViewEngine,“视图名称”通常与文件名相同,而不是扩展名,但框架不需要其他视图引擎.
同样,您可能还有理由希望应用程序查找视图和非默认文件夹.您可以通过创建自己的ViewEngine来实现.我在this blog post中展示了该技术,但类型名称不同,因为它是为早期版本的框架编写的.然而,基本思想仍然是一样的.