ASP.Net MVC - ресурс Не удается найти ошибку
Я полностью новичок в ASP.Net MVC. Я только что создал проект MVC3 в Visual Studio 2010. Механизм просмотра - это бритва. Когда я только запускал приложение, он дал правильный результат в браузере. URL http://localhost:4163/. Затем я применил "Установить как стартовую страницу" в Index.cshtml внутри папки ~\Views\Home. Затем, когда я запустил приложение, url стал http://localhost:4148/Views/Home/Index.cshtml, и он сказал, что ресурс не найден. Что я могу сделать, чтобы исправить это? Где выполняется сопоставление URL?
Файл Global.asax:
using System.Web.Mvc;
using System.Web.Routing;
namespace TEST
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
}
Ответы
Ответ 1
URL-адрес или "маршрутизация" обрабатывается Global.asax в корневом каталоге вашего сайта ASP.NET MVC.
Когда вы нажимаете "Установить как стартовую страницу", он изменяет параметры проекта, чтобы искать этот файл относительно корня приложения. Но в MVC по умолчанию маршрут к вашей индексной странице на самом деле http://localhost:4163/Home/Index
- читайте что-то вроде this, чтобы понять, как работает маршрутизация.
Чтобы "исправить" ваш проект сейчас, когда он пытается (и не удается) напрямую перейти к представлению, щелкните правой кнопкой мыши проект и выберите "Properties
", перейдите на вкладку "Web
" и выберите "Specific Page
", оставив текстовое поле пустым. Теперь, когда вы начинаете отлаживать, он снова должен вернуться на домашнюю страницу - посмотрите параметры маршрута по умолчанию, чтобы узнать, почему в методе RegisterRoutes в Global.asax
Ответ 2
Убедитесь, что вы создали класс HomeController.cs в папке вашего контроллера.
Ответ 3
В аналогичной проблеме, с которой я столкнулся, у моего Action был атрибут HTTP POST, но я пытался открыть страницу (по умолчанию это "GET" ).
Поэтому мне пришлось создать HTTP-версию "GET".
Ответ 4
У меня тоже была ошибка html-404:
Ресурс не найден. Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, изменилось его имя или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно.
Но после тщательного изучения я обнаружил, что я оставил имя контроллера как Default1Controller
вместо его изменения на HomeController
. Когда я сделал изменения и отладил приложение, это сработало. Надеюсь, это поможет вам, если у вас есть та же проблема.
Ответ 5
Следуйте инструкциям ниже, чтобы запустить приложение asp.net mvc.
-
Создание контроллера
Щелкните правой кнопкой мыши папку контроллеров и добавьте контроллер.
Примечание. Не удаляйте постфикс контроллера. Его соглашения ASP.NET MVC.
Дайте имя контроллеру как "DemoController", и вы увидите, что действие "Index" присутствует в "DemoController". "Индекс" действует по умолчанию, когда вы создадите контроллер.
-
Просмотр создания
Щелкните правой кнопкой мыши по названию действия "Индекс" и продолжайте
имя вида по умолчанию i.e. "Индекс" и нажмите кнопку "Добавить".
-
Настройка маршрута
Откройте файл Global.asax, после чего вы увидите настройки по умолчанию для маршрута
сопоставляется с контроллером "Главная" и "Индекс" меняет его на "Демо",
контроллер и "Индекс" . Отображение URL-адресов написано в Global.asax
файл. Когда вы откроете файл Global.asax, вы увидите ниже:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Измените его на:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Demo", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
И запустите приложение, чтобы увидеть, как ваше приложение работает.
Ответ 6
Невероятно, но я случайно удалил ключевое слово public из контроллера!
![enter image description here]()
Я полагаю, что это точно не поможет никому другому, но вы никогда не знаете...
Ответ 7
Ну, вы не можете установить страницу по умолчанию в asp.net MVC.
Перейдите на global.asax.cs и посмотрите определение маршрутизации. Маршрут по умолчанию указывает на метод индекса HomeController.
Вам лучше посмотреть несколько коротких фильмов о asp.net mvc или попытаться найти учебник по закуску для ботаников, который довольно быстро познакомит вас с фреймворком.
Я думаю, что лучшие ответы об уроках уже были предоставлены как ответы на этот вопрос:
ASP.NET MVC Быстрые учебники
Ответ 8
В asp.net mvc вы не можете использовать параметр "установить как стартовую страницу", потому что представления mvc не являются независимыми, например, страницами веб-форм. Это только файлы шаблонов для отображения вашей модели. У них нет обрабатывающего http-модуля. Все веб-запросы должны проходить через действия контроллера, вы не можете запрашивать представления напрямую.
Ответ 9
У меня была аналогичная проблема некоторое время назад при использовании VS 2012.
Решив просто перестроить приложение, нажмите "Сборка" > "Восстановить".
Ответ 10
Если вы используете IIS Express. Возможно, вы открыли другой проект, который использует тот же виртуальный каталог. Когда вы открыли второе решение, VS переназначает каталог IIS в другое место. В результате он не будет работать с разными проблемами. У меня была такая же ошибка, как и тема стартера.
Исправить: закрыть все экземпляры VS Studio. Откройте VS с проектом, который вы работаете и перестраиваете.
Ответ 11
Просто добавьте этот код здесь - если у кого-то возникают проблемы, когда страница индекса на Home Controller больше не загружается, возможно, это связано с тем, что вы еще не настроили StartUp Project. Щелкните правой кнопкой мыши проект, с которого вы хотите начать свое приложение, и установите его как проект запуска, и вам должно быть хорошо.
Ответ 12
(MVC 5): измените RouteConfig.cs
на включение двух routes
следующим образом:
routes.MapRoute(
name: "DefaultWithLanguage",
url: "{language}/{controller}/{action}/{id}",
defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new {language= "[a-z]{2}"}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
поэтому, когда языковая часть маршрута не указана, он не ошибочно принимает имена контроллеров, которые не соответствуют регулярному выражению "[a-z]{2}"
, и заменяет язык по умолчанию и перенаправляет на остальную часть маршрута...
Ответ 13
Начальная страница проекта asp.net mvc - "Текущая страница" неактивна. Просто откройте файл на стороне сервера и запустите проект. таким образом, mvc открывает контроллер по умолчанию, который является homecontroller для вашего проекта
Ответ 14
Вы можете изменить начальную страницу внутри своих свойств проекта (проект → свойства проекта). На вкладке "Веб" вы можете выбрать specify page
и изменить стартовую страницу на home/
или home/index
. Это приведет вас к правильной странице в соответствии с вашими маршрутами. Адрес http://localhost:4148/Views/Home/Index.cshtml не работает специально, потому что он обрабатывается в соответствии с вашими маршрутами, которые указывают, что URL должен быть http://localhost:4148/ {controller}/{действие} и необязательный /{id}.
Если вы хотите узнать больше о маршрутизации, посмотрите здесь.
Ответ 15
Простое решение с использованием HomeController.cs:
Откройте файл HomeController.cs в папке "Контроллеры". Добавьте код:
public ActionResult Edit()
{
return View();
}
Теперь, если вы используете другой контроллер (не HomeController):
Чтобы увидеть ваш вид, как это:
http://localhost:1234/xyz/MyView
В файле xyzController.cs в папке "Контроллеры"
убедитесь, что вы добавили метод ActionResult следующим образом:
public ActionResult MyView()
{
return View(myView); //pass in your view if you want.
}
Я также получил это сообщение, когда неправильно указывал название своей модели:
@using (Html.BeginForm("MyView", "MyModel", FormMethod.Get))
Ответ 16
в адресной строке ввода браузера:
ControllerName/ActionMethod
не вводить имя_контроллера/ViewName
например
в адресной строке: http://localhost:55029/test2/getview
Код файла cshtml:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>MyView</title>
</head>
<body>
<div>
</div>
</body>
</html>
и код файла cs:
public ActionResult GetView()
{
return View("MyView");
}
Ответ 17
Если вы пробовали все вышеперечисленные решения, и проблема все еще сохраняется, используйте это простое решение.
Откройте отладчик facebook из этой , введите URL-адрес страницы и нажмите кнопку" Получить новую информацию о царапинах". Это решит вашу проблему.
Причина (я думаю) заключается в том, что facebook api сохраняет текущее состояние страницы и показывает ее на своем собственном сервере. если вы нажимаете кнопку совместного доступа во время кодирования, и ваша страница на самом деле не загружается, то facebook api не может найти эту страницу на сервере и сохраняет состояние страницы как "ресурс не найден". Теперь он будет показывать одно и то же сообщение даже после загрузки страницы. Когда вы извлекаете страницу из отладчика facebook, она разрешает все с нуля и сохраняет текущее состояние страницы, а затем кнопка совместного доступа начинает работать без каких-либо изменений в кодировке.
Ответ 18
У меня была такая же проблема, за исключением того, что я не использовал имя Index.cshtml
для моего View
, я сделал это, например, LandingPage.cshtml
, моя проблема заключалась в том, что ActionResult
в моем контроллере не был то же имя, что и мое имя вида (в этом случае мой ActionResult был вызван Index()). Это на самом деле очевидно и глупая ошибка с моей стороны, но im new для MVC, поэтому я потерплю неудачу с основами здесь и там.
Поэтому в моем случае мне нужно было изменить мой ActionResult
на то же имя, что и мой View
: LandingPage.cshtml
public ActionResult LandingPage()
{
ProjectDetailsViewModels PD = new ProjectDetailsViewModels();
List<ProjectDetail> PDList = new List<ProjectDetail>();
PDList = GetProductList();
PD.Projectmodel = PDList;
return View(PD);
}
Я новичок в MVC, поэтому, возможно, это поможет кому-то другому, кто будет новым и борется с тем же, что и я.
Ответ 19
Для меня проблема была вызвана проблемой пространства имен.
Я обновил пространство имен проектов в моих классах веб-проектов от MyProject до MyProject.Web, но я забыл обновить Project Properties → Default Namespace. Поэтому, когда я добавил новый контроллер, он использовал старое пространство имен. Все, что мне нужно было сделать, это правильное пространство имен в новом контроллере, и это сработало.
Ответ 20
У меня был контроллер с именем usersController, поэтому я попытался создать стартовую страницу, изменив контроллер по умолчанию с Home на usersController, как показано ниже.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "usersController", action = "Index", id = UrlParameter.Optional }
);
}
Решение состояло в том, чтобы изменить значение контроллера по умолчанию для пользователей, а не usersController
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "users", action = "Index", id = UrlParameter.Optional }
);
}
Ответ 21
Устранена проблема, щелкнув правой кнопкой мыши на представлении, которое я хотел в качестве начальной страницы. После отображения ошибки "Ресурс, который вы ищете, не найден" Просто нажмите правой кнопкой мыши на свой проект, перейдите в Интернет и выберите "Текущая страница". Это решит проблему.