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 }
);
}
}
}