10

空の MVC4 アプリケーションを作成しました。すべて正常に動作しています。その後、「モデレーター」という名前のプロジェクトにエリアを追加しました。私のエリア ルーティング コードは次のようなものです。

using System;
using System.Web.Mvc;

namespace EskimoArt.Areas.Moderator
{
    public class ModeratorAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Moderator";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Moderator_default",
                "Moderator/{controller}/{action}/{id}",
                new {controller="Dashboard", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

そして、私の Global.asx コードは次のようになります。

using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace EskimoArt
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

しかし、今私はアクセスしたい

> http://localhost/Moderator/Dashboard

このようなエラーページが表示されます

Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /Moderator

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929
4

6 に答える 6

14

Check the namespace of your controller.

I had moved some code into an area and the namespace was still showing the old location.

ReSharper has a very cool option to fix the namespaces of all files in the folder, project or solution! It is very handy to fix this.

于 2015-02-20T13:54:38.210 に答える
8

私も同じ問題を抱えていました。App_Start/RouteConfig.cs を見て、このコードの上に AreaRegistration.RegisterAllAreas(); を追加します。

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        AreaRegistration.RegisterAllAreas();

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

Areas/Moderator/Controllers/DashboardController.cs を作成します。

public class DashboardController : Controller
{
    //
    // GET: /Moderator/Dashboard/

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

そして作成する

エリア/モデレーター/ビュー/ダッシュボード/Index.cshtml

Areas/Moderator/Views/Web.config にも Web.config が必要です ...

于 2013-10-08T06:08:12.110 に答える
0

フォルダー内RegisterRoutes()のメソッドにRouteConfig.cs「namespace:」という名前のパラメーターを追加するだけです。App_Startそして、「namespace」の値を、アクション メソッドを呼び出したいコントローラーの名前空間に指定します。Index()次の例では、プロジェクトのルートから Village Controller のメソッドを呼び出したいと考えています。

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Village", action = "Index", id = UrlParameter.Optional },
            namespaces: new string[] { "MvcApplication1.Controllers" }
        );
    }
于 2014-08-18T08:46:27.473 に答える
0

プロジェクト プロパティ > Web > アクションの開始 > 特定のページの場合 | アクション | アクション | url が定義されている場合、マップされたルートと一致します。

于 2015-10-10T12:06:30.563 に答える