Области MVC и ошибка "404 ресурс не найден"
Я унаследовал испорченное приложение MVC от программиста, который покинул компанию до того, как я присоединился. Предыдущий программист своим последним действием реорганизовал приложение в области (как показано на прилагаемом снимке обозревателя решений). Я дергаю себя за то, что, я уверен, является простой вещью, но, поскольку я новичок в MVC, в настоящий момент это огромная вещь:
Многие ссылки, созданные с помощью разметки @Html.ActionLink(), работают правильно, но некоторые не работают с ошибкой "404 ресурс не найден [...]".
Вот пример ссылки, которая терпит неудачу:
@Html.ActionLink("Upload Documents", "BlankPageTest", new { controller = "DocumentUpload", area = "Documents" }, new { @class = "btn btn-info" })
... и вот ссылка, которая работает:
@Html.ActionLink("Edit Questions", "ChangeQuestions", new { controller = "Account", area = "UserAccount" }, new { @class = "btn btn-info" })
Обе эти ссылки находятся в разметке для представления "MyAccount.cshtml", которое находится в области "UserAccount". Единственное функциональное различие, которое я вижу между ошибочной ссылкой и той, которая работает, состоит в том, что ресурс для рабочей ссылки (ChangeQuestions.cshtml) ЖИВЕТ В ЖЕ ОБЛАСТИ как вид (MyAccount.cshtml). Однако, поскольку контроллер и область являются параметрами для Html.ActionLink (), я не понимаю, как MVC запутался.
Полный URL, указанный в сообщении "404 ресурс не найден":
/CROMERR.Website/Documents/DocumentUpload/BlankPageTest
У меня есть метод в контроллере для целевого URL-адреса с именем "DocumentUpload"... не могу найти более очевидные вещи, чтобы попробовать, так что я хотел бы попросить кого-то более знающего. Любая помощь приветствуется.
DocumentAreaRegistration
содержит код:
public override string AreaName
{
get
{
return "Documents";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Documents_default",
"Documents/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional });
}
1 ответ
Исходя из предыдущего вопроса, который вы задали, ваша проблема заключается в том, что вы видите не в том месте, что вызывает ошибку 404.
От DocumentUpload
контроллер, вы пытаетесь вернуть вид BlankTestPage.cshtml
, Однако при просмотре скриншотов BlankTestPage.cshtml
вид на самом деле находится в Views/Documents
папка. По умолчанию MVC будет смотреть только в папках Views/ControllerName
(где имя контроллера - это имя контроллера, пытающегося вернуть представление) и Views/Shared
,
Если вам нужно ссылку BlankTestPage.cshtml
с нескольких контроллеров поместите его в общую папку. В противном случае вам нужно переместить это представление из папки "Представление документов" в папку представления "DocumentUpload" (пустое на скриншоте).