Области 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" (пустое на скриншоте).

Другие вопросы по тегам