MVC 3 - Новая область - Ошибка 404 - Ресурс не найден - попробовал отладчик маршрута

У меня есть небольшая часть приложения MVC 3 для демонстрации. У меня есть одна область, и это работает нормально.

Я только что добавил еще одну область, ожидая, что просто подниму приложение, и он будет работать, но нет, 404 - Ресурс не найден.

Маршрут карты в AreaRegistration по умолчанию (как и первая область, которую я создал).

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

Я попытался добавить в него определенный контроллер, но ничего.

Итак, я скачал Phil Haack RouteDebugger, и мой маршрут найден при вводе http://server/Postcard/Create (который я также пытаюсь получить)

Структура области

alt text

Мой контроллер

    public class CreateController : Controller
{
    private ILogger Logger { get; set; }
    private ICardSender Emailer { get; set; }
    private IOCCardRepository CardRepository { get; set; }

    public CreateController(ILogger logger, ICardSender cardSender, IOCCardRepository repository)
    {
        this.Logger = logger;
        this.Emailer = cardSender;
        this.CardRepository = repository;
    }


    //
    // GET: /Postcard/Create/

    public ActionResult Index()
    {
        var model = new OCPostcardModel().Create();

        return View(model);
    }

СЕЙЧАС: С тех пор я удалил всю область, попробовал еще раз, но это не сработало. Поэтому я добавил в конкретный контроллер на маршруте (Inside AreaRegistration file)

context.MapRoute(
            "Postcard_default",
            "Postcard/{controller}/{action}/{id}",
            new { controller = "Create", action = "Index", id = UrlParameter.Optional }
        );

И его работа... Я не знаю, почему это не сработало, когда я делал это раньше, но это сейчас.

По-прежнему любопытно, хотя я не видел, чтобы кто-нибудь добавлял в этот контроллер в маршрут в любом из демо, на которое я смотрел, - и у меня его нет в другой области?

Ответ 1

Я столкнулся с этим, когда я переместил контроллер в область, но забыл обновить пространство имен. Имя контроллера ограничено пространством имен Area. Итак, "Некоторые" в "Area" будут отображаться в App.Areas.Area.Controllers.SomeController, которого не было.

Ответ 2

Вам не хватает части контроллера в вашем макете

Ответ 3

Попробуйте добавить класс PostCardAreaRegistration в разделе PostCard

using System.Web.Mvc;

namespace Areas.PostCard
{
    public class PostCardAreaRegistration: AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "PostCard";
            }
        }

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