首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MVC在完整视图和部分视图中都要寻找.aspx和.ascx?

为什么MVC在完整视图和部分视图中都要寻找.aspx和.ascx?
EN

Stack Overflow用户
提问于 2009-04-28 14:30:42
回答 6查看 2.4K关注 0票数 4

我刚刚遇到了一个问题,我有一个试图呈现局部视图(FindUser.ascx)的视图(FindUser.aspx)。视图的默认搜索路径在各种文件夹中查找以视图命名的文件。令人惊讶的是,对于视图,它会查找扩展名为.aspx或.ascx的文件。而分部视图使用相同的列表。

因为我将这两个文件命名为相同的名称,所以视图分辨率反复地首先找到页面,然后陷入无限循环。

我知道我可以通过将视图和部分视图命名为不同的名称,或者将我的搜索位置更改为仅用于视图的.aspx和仅用于部分视图的.ascx来解决此问题。

我的问题是,为什么MVC默认两个扩展都要看?似乎更有意义是,一个视图是一个页面控件,一个局部视图是一个.aspx == == .ascx。那么,为什么要混水摸鱼呢?

EN

回答 6

Stack Overflow用户

发布于 2009-04-28 14:36:39

因为不管是否是部分的,视图仍然是视图。拥有FindUser.aspx和FindUser.ascx等同于拥有两个同名的常规视图。

票数 3
EN

Stack Overflow用户

发布于 2009-04-28 15:53:55

我认为避免这种问题的方法是使用不同的视图名称。您可能不应该有两个文件名仅在扩展名上不同的视图。然而,如果你真的想要一个严格的页面=视图,控件=部分映射,只需通过继承WebFormViewEngine来创建你自己的ViewEngine,并更改视图位置格式:

代码语言:javascript
复制
public class MyWebFormViewEngine : WebFormViewEngine {
    public MyWebFormViewEngine() {
        base.ViewLocationFormats 
          = new string[] {"~/Views/{1}/{0}.aspx", "~/Views/Shared/{0}.aspx" };
        base.PartialViewLocationFormats 
          = new string[] { "~/Views/{1}/{0}.ascx", "~/Views/Shared/{0}.ascx" };
    }
}

然后在Application_Start()中将其配置为视图引擎:

代码语言:javascript
复制
// Call this method during Application_Start to setup your view engine
internal static void SetupViewEngines() {
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new MyWebFormViewEngine());
}
票数 2
EN

Stack Overflow用户

发布于 2009-04-28 14:38:44

无论如何,我将“控制”附加到我所有.ascx ViewUserControls的名称中。所以我会有FindUser.aspxFindUserControl.ascx。不能解决这个问题,但是它可以通过避免命名冲突来帮助你避免这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/798278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档