Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MVC3和常规ASP.NET一样的文件夹结构_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 使用MVC3和常规ASP.NET一样的文件夹结构

C# 使用MVC3和常规ASP.NET一样的文件夹结构,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,因此,我正在阅读有关构建MVC3项目的文章,有一件事让我非常困扰。项目的文件夹结构与HTTP请求的路径没有任何对应关系。我喜欢并想使用很多东西,但拥有一个扁平的文件夹结构并不是其中之一 为什么这是一个问题?好吧,我认为在构建一个包含大量内容页面和各种表单/动态页面(我们的大多数网站都是这样)的网站时,这会成为一个问题,而这通常是由不同的人完成的。对于客户端开发人员来说,遵循动态页面的路由规则和/或创建新页面似乎太复杂了 我想了解的是,是否有办法以如下方式配置MVC3应用程序: 它遵循目录结构查找

因此,我正在阅读有关构建MVC3项目的文章,有一件事让我非常困扰。项目的文件夹结构与HTTP请求的路径没有任何对应关系。我喜欢并想使用很多东西,但拥有一个扁平的文件夹结构并不是其中之一

为什么这是一个问题?好吧,我认为在构建一个包含大量内容页面和各种表单/动态页面(我们的大多数网站都是这样)的网站时,这会成为一个问题,而这通常是由不同的人完成的。对于客户端开发人员来说,遵循动态页面的路由规则和/或创建新页面似乎太复杂了

我想了解的是,是否有办法以如下方式配置MVC3应用程序:

  • 它遵循目录结构查找控制器,每个控制器没有显式的路由图
  • 视图与相应控制器位于同一文件夹中
  • 路由魔术仍然适用于动作和参数
  • 例如,我想请求
    /fus/ro/dah/
    尝试在
    \webroot\fus\ro\dah\
    文件夹中查找
    DahController
    ,并执行其
    索引
    操作。如果未找到,它将在
    \webroot\fus\ro\
    文件夹中查找带有
    Dah
    操作的
    RoController

    MVC完全有可能根本就不打算以这种方式工作,我只是想把一个方形的钉子塞进一个圆形的孔中

    更新: 看起来我可以将一个视图文件放入所需的文件夹结构中,并将其执行。然而,布局显然不起作用,因为它需要一个控制器。这是否意味着我必须为纯内容页面创建一个控制器?这是一个相当糟糕的设计

    更新2:
    现在的主要问题是,创建“fus”文件夹意味着MVC甚至不会尝试查找
    FusController
    。。。不在“fus”文件夹下,也不在其他任何地方。有可能绕过这个问题吗?

    我相信ASP.NET MVC不应该以这种方式使用。虽然您可以配置MVC来执行此操作,但最好保持标准的
    /controller/action/parameters
    URL格式。如果你有一个具有许多不同功能的复杂网站,这些领域可能会有所帮助。每个区域都有自己的控制器、模型和视图,所以在网站不同部分工作的团队不会相互干扰


    虽然听起来很方便,但该框架首先搜索控制器并执行索引操作,然后搜索另一个,我发现这是个坏主意。URL应该明确定义,带有Ro操作的Fus控制器不应该停止工作,因为有人创建了带有索引操作的RoController。

    您可以混合使用Asp.net和Asp.net MVC。正如LukLed所说,MVC是约定多于配置模式。如果你遵守惯例。您不需要进行配置。您可以检查此链接是否将asp.net内容与MVC3混淆


    同时查看使用区域。我认为这帮助我克服了MVC的文件夹结构问题。所以我可以使用基本文件夹作为我的主页详细信息,然后我可以有一个“管理”区域,它是一个单独的文件夹,诸如此类的东西

    例如,我想要一个请求/fus/ro/dah/来尝试查找 在\webroot\fus\ro\dah\文件夹中创建控制器,并执行其索引 行动。如果找不到,它将在中查找具有Dah操作的RoController \webroot\fus\ro\文件夹等

    MVC不是为这样的特殊需求而设计的,它是一个使用模型-视图-控制器模式构建应用程序的通用框架

    如果您不能为框架弯曲应用程序,您可以为应用程序弯曲框架,老实说,MVC是非常可定制的。[作为证明,在我正在进行的当前项目(从ASP迁移到MVC)中,我们有xml模型,也没有类。我们使用XSLT进行呈现。通过一些工作,我们创建了自定义组件,如自定义视图引擎、自定义验证提供器、自定义模型绑定器……以使框架最适合应用程序,而且确实如此]

    MVC不是设计的,也不是强制使用它的,您可以根据需要定制/扩展它。在您的情况下,您可能需要创建一个

    自定义控制器工厂(因为您希望自定义控制器的选择方式)

    自定义视图引擎(因为要自定义视图的放置位置)

    也可能是其他人

    对于自定义控制器工厂,您必须扩展
    DefaultControllerFactory
    类。你可以通过谷歌找到很多文章,解释如何创建自定义控制器工厂

    根据您使用的视图引擎,必须扩展相应的视图引擎。例如,如果您使用的是web表单,则必须扩展
    WebFormsViewEngine
    ,然后才能使用
    RazorViewEngine

    更多信息。检查此链接

    您希望它的“常规ASP.net”程度如何?如果您想将“遗留”ASP.NETWeb表单与MVC混合使用,您当然可以-re:mixed MVC与“基于文件的aspx”-也称为“混合”。最终,一切都是ASP.Net

    这是由VisualStudio生成的标准MVC应用程序。我已经添加了一个文件夹
    somedirectory
    ,在那里我想使用遗留的
    文件夹/文件.ext
    范例,并且有一个
    default.aspx
    Web表单文件:

    • 我可以通过
      http://foo.com/somedirectory
    • 我也可以使用“漂亮的URL”吗
    Vanilla
    Global.asax
    由VS生成,刚刚添加了
    MapPageRoute

    ....
    
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        //using "pretty urls" - ordering your routes matter.
        routes.MapPageRoute("theWebForm", "legacy", "~/somedirectory/default.aspx");
    
        routes.MapRoute(
            "Default", 
            "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
    }
    
    • 现在我可以通过
      http://foo.com/legacy
    只要检查一下你的路线顺序,好吗