0

MVC 4 サイトがあり、Views フォルダーの下に、さまざまなビュー用のフォルダーがあります。その一つが「サービス」という名前です。コントローラーの下に、サービス コントローラーがあります。すべてが順調に進みました。次に、サイトのルートに「Services」という名前のフォルダーを作成しました。これで、ルーティングが Views フォルダーの下を探すのではなく、そのフォルダーを使用してビューを探すようになりました。???? 誰かがこの現象についての洞察を私に与えることができますか? 単純に 2 番目のフォルダーの名前を変更しただけで、生活は良好になりましたが、ルーティングがデフォルトでビュー フォルダーに移動すると思っていたので、これは予想外でした。

4

3 に答える 3

-1

RouteConfig ファイルの App_Start フォルダーでルーティングを構成できます。追加すると

            routes.MapRoute(
            name: "", 
            url: "Services/Index/{id}", 
            defaults: new
                          {
                              controller = "Services", 
                              action = "Index", 
                              id = UrlParameter.Optional
                          });

routes.IgnoreRoute 行を超えると、MVC プロジェクトに Services フォルダーと、そのビューを含む Services コントローラーを含めることができます。

他のビューのいずれかに次のようなものがある場合:

@Html.ActionLink("To services", "Index", "Services")

~/Services だけでなく ~/Services/Index としてレンダリングされるようになりました

于 2013-05-29T20:31:45.710 に答える
-1

ルートが /Services/MethodName のようなもので、ビュー フォルダーも /Services/MethodName.ascx またはディスク上の何かである可能性があります...そして、MVC に既存のファイルをルーティングするように指示しない場合、それらは提供されます。代わりに、デフォルトでディスクからオフにします。これをオーバーライドするには、 Application_Start の Global.asax.cs でRouteCollection.RouteExistingFiles = true を設定します。

これは、MVC3 の既定のビュー エンジンからビューを見つけるための逆アセンブル コードです。

かみそり:

public RazorViewEngine(IViewPageActivator viewPageActivator) : base(viewPageActivator)
{
    base.AreaViewLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.cshtml",
        "~/Areas/{2}/Views/{1}/{0}.vbhtml",
        "~/Areas/{2}/Views/Shared/{0}.cshtml",
        "~/Areas/{2}/Views/Shared/{0}.vbhtml"
    };
    base.AreaMasterLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.cshtml",
        "~/Areas/{2}/Views/{1}/{0}.vbhtml",
        "~/Areas/{2}/Views/Shared/{0}.cshtml",
        "~/Areas/{2}/Views/Shared/{0}.vbhtml"
    };
    base.AreaPartialViewLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.cshtml",
        "~/Areas/{2}/Views/{1}/{0}.vbhtml",
        "~/Areas/{2}/Views/Shared/{0}.cshtml",
        "~/Areas/{2}/Views/Shared/{0}.vbhtml"
    };
    base.ViewLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.cshtml",
        "~/Views/{1}/{0}.vbhtml",
        "~/Views/Shared/{0}.cshtml",
        "~/Views/Shared/{0}.vbhtml"
    };
    base.MasterLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.cshtml",
        "~/Views/{1}/{0}.vbhtml",
        "~/Views/Shared/{0}.cshtml",
        "~/Views/Shared/{0}.vbhtml"
    };
    base.PartialViewLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.cshtml",
        "~/Views/{1}/{0}.vbhtml",
        "~/Views/Shared/{0}.cshtml",
        "~/Views/Shared/{0}.vbhtml"
    };
    base.FileExtensions = new string[]
    {
        "cshtml",
        "vbhtml"
    };
}

ウェブフォーム:

public WebFormViewEngine(IViewPageActivator viewPageActivator) : base(viewPageActivator)
{
    base.MasterLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.master",
        "~/Views/Shared/{0}.master"
    };
    base.AreaMasterLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.master",
        "~/Areas/{2}/Views/Shared/{0}.master"
    };
    base.ViewLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.aspx",
        "~/Views/{1}/{0}.ascx",
        "~/Views/Shared/{0}.aspx",
        "~/Views/Shared/{0}.ascx"
    };
    base.AreaViewLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.aspx",
        "~/Areas/{2}/Views/{1}/{0}.ascx",
        "~/Areas/{2}/Views/Shared/{0}.aspx",
        "~/Areas/{2}/Views/Shared/{0}.ascx"
    };
    base.PartialViewLocationFormats = base.ViewLocationFormats;
    base.AreaPartialViewLocationFormats = base.AreaViewLocationFormats;
    base.FileExtensions = new string[]
    {
        "aspx",
        "ascx",
        "master"
    };
}
于 2013-05-29T19:59:44.377 に答える