2014-11-10 4 views
0

Я унаследовал сломанное приложение MVC от программиста, который покинул компанию, прежде чем я присоединился. Предыдущий программист в своем последнем действии здесь реорганизовал приложение в Районы (как показано в прикрепленном снимке Solution Explorer). Я вытягиваю свои волосы из-за того, что я уверен, это просто, но поскольку я новичок в MVC, на данный момент это огромная вещь:MVC области и ошибка «404 ресурс не найден»

Многие из ссылок, созданных разметкой @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" }) 

Оба эти ссылки в разметке для View «MyAccount.cshtml», который живет в области «UserAccount». Единственное функциональное различие, которое я вижу между отсутствующей ссылкой и тем, что работает, - это ресурс рабочей ссылки (ChangeQuestions.cshtml), ЖИВЫЙ В ОДНОЙ ЗОНЕ, как представление (MyAccount.cshtml). Однако, поскольку и контроллер, и область являются параметрами для Html.ActionLink(), я не вижу, как MVC будет путать.

Полный URL приведен в «404 ресурса не найден» сообщение:

/CROMERR.Website/Documents/DocumentUpload/BlankPageTest 

У меня есть метод в контроллере для целевого URL под названием «DocumentUpload» ... не может найти более очевидные вещи чтобы попытаться так подумать, я бы спросил кого-то более осведомленного. Любая помощь приветствуется.

enter image description here

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

Что находится в 'DocumentsAreaRegistration' и называется ли он формой? – DavidG

+0

DavidG, DocumentAreaRegistration содержит код ниже. Метод RegisterArea() имеет нулевые ссылки в соответствии с Visual Studio. public override string AreaName { { { возвращение "Документы"; } } public override void RegisterArea (AreaRegistrationContext context) { Контекст.MapRoute ( «Documents_default», «Документы/{Контроллер}/{действие}/{id}", новый {action = "Index", id = UrlParameter.Optional} ); } – markaaronky

+0

Yikes. Нет возможности форматировать код в ответах DavidG. Приношу свои извинения за спагетти. В указанном вами файле есть один метод, но он нигде не вызывается ... – markaaronky

ответ

1

Coming с предыдущим вопросом, что вы просили, ваша проблема с вашим видом в неположенном месте, которое вызывает ошибку 404.

С контроллера DocumentUpload вы пытаетесь вернуть вид BlankTestPage.cshtml. Однако при просмотре скриншотов вид BlankTestPage.cshtml фактически находится в папке Views/Documents. По умолчанию MVC будет смотреть только в папках Views/ControllerName (где имя контроллера - это имя контроллера, пытающегося вернуть представление) и Views/Shared.

Если вам нужно указать BlankTestPage.cshtml с нескольких контроллеров, поместите его в общую папку. Кроме того, вам нужно переместить это представление из папки «Просмотр документов» в папку просмотра DocumentUpload (пустая на скриншоте).

Смежные вопросы