我对 View 的组织方式感到困惑,理解这一点很重要,因为ASP.NET MVC使用约定来使一切正常工作。

在views目录下,有子目录。这些子目录中包含 View 。我假设子目录映射到 Controller ,并且 Controller 根据其子目录中包含的 View 进行操作。

是否对这些目录中包含哪些类型的 View 有新的期望?例如,每个目录的默认页面应该是index.aspx吗?页面是否应遵循诸如Create [controller] .aspx,List [controller] .aspx等命名约定?还是没关系?

最佳答案

View 目录命名和文件命名很重要,因为ASP.NET MVC框架对它们进行了某些假设。如果您不遵守这些假设,则必须编写代码以使框架知道您在做什么。一般来说,除非有充分的理由不这样做,否则您应该遵守这些假设。

让我们看一下最简单的 Controller Action :

    public ActionResult NotAuthorized()
    {
        return View();
    }

因为在对View()的调用中未指定 View 名称,所以框架将假定 View 文件名与操作名称相同。该框架具有一个称为ViewEngine的类型,它将提供扩展名。默认的ViewEngine是WebFormViewEngine,它将采用该名称并在其中附加一个.aspx。因此,在这种情况下,完整文件名将为NotAuthorized.aspx。

但是,将在哪个文件夹中找到该文件?同样,ViewEngine提供了该信息。使用WebFormViewEngine,它将在两个文件夹中查找:〜/Views/Shared和〜/Views/{controller}

因此,如果您的 Controller 名为AccountController,它将在〜/Views/Account中查找

但是有时候您可能不想遵守这些规则。例如,两个不同的 Action 可能会返回相同的 View (具有不同的模型或其他内容)。在这种情况下,如果您在操作中明确指定 View 名称:
    public ActionResult NotAuthorized()
    {
        return View("Foo");
    }

请注意,对于WebFormViewEngine,“ View 名称”通常与文件名相同,但扩展名较少,但是该框架不需要其他 View 引擎。

同样,您可能也有理由希望您的应用程序查找 View 和非默认文件夹。您可以通过创建自己的ViewEngine来做到这一点。我在this blog post中展示了该技术,但是类型名称有所不同,因为它是为框架的早期版本编写的。但是,基本思想仍然相同。

关于asp.net-mvc - ASP.NET MVC中的 View 文件/目录结构应该是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/127886/

10-09 17:38
查看更多