ASP.Net MVC-ресурс не может быть найдена ошибка
Я совершенно новичок ASP.Net MVC. Я только что создал проект MVC3 в Visual Studio 2010. Двигатель представления-бритва. Когда я просто запустил приложение, оно дало правильный результат в браузере. URL-адрес http://localhost:4163/ . Затем я применил "установить в качестве начальной страницы" для индексирования.cshtml внутри папки ~ViewsHome. Затем, когда я запустил приложение url стал http://localhost:4148/Views/Home/Index.cshtml и он сказал, что ресурс не может быть найден. Что мне делать сделать, чтобы исправить это? Где выполняется сопоставление url?
глобальные.файл 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);
}
}
}
21 ответов:
сопоставление URL-адресов или "маршрутизация" осуществляется глобальный.асакс в корне вашего ASP.NET сайт MVC.
при нажатии кнопки "Установить в качестве начальной страницы" он изменяет настройки проекта, чтобы искать этот файл относительно корня приложения. Но в MVC the по умолчанию маршрут к Вашей странице индекса на самом деле
http://localhost:4163/Home/Index- прочитать что-то вроде этой чтобы получить представление о том, как работает маршрутизация.чтобы "исправить" ваш проект теперь, когда он пытается (и не удается) перейти к просмотр напрямую, щелкните правой кнопкой мыши проект и выберите"
Properties" выберите "Web"tab и выберите"Specific Page", оставив поле пустым. Теперь, когда вы начинаете отлаживать, он должен снова перейти на домашнюю страницу - посмотрите на параметры маршрута по умолчанию, чтобы узнать, почему в методе RegisterRoutes в Global.асакс
в аналогичной проблеме, с которой я столкнулся, у моего действия был атрибут HTTP "POST", но я пытался открыть страницу (по умолчанию это "GET").
поэтому мне пришлось создать HTTP-версию" GET".
Я тоже получил ту же ошибку html-404:
ресурс не может быть найден.Описание: HTTP 404. Ресурс вы ищете (или один из его зависимостей) мог быть удален, было изменено его имя или он временно недоступен. Пожалуйста, просмотрите следующий URL-адрес и убедитесь, что он написан правильно.
но после тщательного изучения я обнаружил, что оставил имя контроллера как
Default1Controllerвместо того чтобы изменять его вHomeController. Когда я внес изменения и отладил приложение, оно работало. Надеюсь, что это поможет вам, если у вас такая же проблема.
выполните следующие действия, чтобы запустить вас asp.net приложение mvc.
создание контроллера
Щелкните правой кнопкой мыши на папке контроллеры и добавить контроллер. Примечание-не удаляйте постфикс контроллера. Его ASP.NET соглашения MVC.
Дайте имя контроллеру как "DemoController", и вы можете увидеть, что действие" Index "присутствует в"DemoController". "Индекс" - это действие по умолчанию, присутствующее при создании контроллера.Создание Вида
Право нажав на "индекс" имя действия и сохранить имя представления по умолчанию, т. е. " индекс "и нажмите кнопку" Добавить".Путь Установки
Открытый Глобальный.asax файл, то вы увидите настройки по умолчанию маршрута сопоставляется с контроллером "Home" и действием" Index "изменяет его на" Demo" контроллер и действие "индекс". Сопоставление URL-адресов записывается в 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 );и запустить приложение вы можете увидеть ваше приложение в работе.
Ну вы не можете установить страницу по умолчанию в asp.net mvc.
Перейти к глобальному.асакс.CS и определение маршрута. Маршрут по умолчанию указывает на метод индексирования HomeController.
Я лучше посмотрю несколько короткометражных фильмов о asp.net mvc или попытаться найти ботаник ужин уроке что позволит вам ознакомиться с рамками довольно быстро.Я думаю, что лучшие ответы о учебниках уже были предоставлены в качестве ответов на это вопрос:
In asp.net mvc вы не можете использовать опцию "Установить в качестве начальной страницы", потому что представления mvc не являются независимыми, как страницы веб-форм. Это только файлы шаблонов для отображения вашей модели. У них нет модуля обработки http. Все веб-запросы должны проходить через действия контроллера, вы не можете запрашивать представления напрямую.
У меня была похожая проблема некоторое время назад при использовании VS 2012. Решается путем простого перестроения приложения, нажав кнопку построить > перестроить.
Если вы используете IIS Express. Возможно, вы открыли другой проект, который использует тот же виртуальный каталог. При открытии 2-го решения VS переназначает этот каталог IIS в другое место. В результате он не будет работать с различными проблемами. У меня была та же ошибка, что и тема стартера.
чтобы исправить: закройте все экземпляры VS Studio. Откройте VS с проектом, который вы работаете и перестраиваете.
просто добавьте это здесь - Если у кого-то есть проблемы, когда страница индекса на домашнем контроллере больше не загружается, это может быть потому, что вы не настроили свой Проекта еще. Щелкните правой кнопкой мыши проект, в котором вы хотите запустить приложение, и установите его в качестве проекта запуска, и вы должны быть хороши.
(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}"и заменяет язык по умолчанию и перенаправляет на остальной части маршрута...
asp.net стартовая страница проекта mvc-это" текущая страница " defaulty. Просто откройте файл на стороне сервера и запустите проект. таким образом, mvc открывает контроллер по умолчанию, который является homecontroller для вашего проекта
вы можете изменить начальную страницу внутри свойств вашего проекта (project -> project properties). На вкладке web вы можете выбрать
specify pageи измените начальную страницу наhome/илиhome/index. Это приведет вас к нужной странице в соответствии с вашими маршрутами. Адрес http://localhost:4148/Views/Home/Index.cshtml не работает специально, потому что он обрабатывается в соответствии с вашими маршрутами, которые утверждают, что url-адрес должен быть http://localhost:4148/ {controller} /{action} и необязательный / {id}.Если вы хотите узнать больше о маршрутизации посмотри здесь.
чтобы увидеть ваш взгляд, как это:
http://localhost:1234/x/MyViewв xController.cs файл, в папке контроллеры,
убедитесь, что вы добавляете метод ActionResult следующим образом:
public ActionResult MyView() { return View(whatever); }Я также получил это сообщение, когда я не ссылался на мое имя модели правильно:
@using (Html.BeginForm ("MyView"," MyModel", FormMethod.Сделать))
в адресной строке-браузер, такой: ControllerName/ActionMethod не input ControllerName/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"); }
Если вы пробовали все вышеперечисленные решения и проблема все еще сохраняется, то используйте это простое решение. Откройте отладчик facebook Из это ссылке, введите url страницы и нажмите на кнопку Fetch new Scrape Information. Это решит вашу проблему.
причина (что я думаю) заключается в том, что Facebook api сохраняет текущее состояние страницы и показывает то же самое со своего собственного сервера. если вы нажмете кнопку "Поделиться" во время кодирования, и ваша страница фактически не загружена, то Facebook api не удалось найти эту страницу на сервере и сохраняет состояние страницы как "ресурс не найден". Теперь он будет продолжать показывать одно и то же сообщение даже после загрузки страницы. Когда вы извлекаете страницу из отладчика facebook, он решает все с нуля и сохраняет текущее состояние страницы, а затем ваша кнопка share начинает работать без каких-либо изменений в кодировке.
у меня была такая же проблема, только я не использовал имя
Index.cshtmlдля меняView, Я сделал это, напримерLandingPage.cshtmlмоя проблема заключалась в том, чтоActionResultв моем контроллере не было того же имени, что и мое имя представления(в этом случае мой ActionResult назывался Index()) - это на самом деле очевидная и глупая ошибка с моей стороны, но я новичок в MVC, поэтому я потерплю неудачу с основами здесь и там.так что в моем случае надо менять
ActionResultчтобы быть таким же именем, как мойView:LandingPage.cshtmlpublic ActionResult LandingPage() { ProjectDetailsViewModels PD = new ProjectDetailsViewModels(); List<ProjectDetail> PDList = new List<ProjectDetail>(); PDList = GetProductList(); PD.Projectmodel = PDList; return View(PD); }Я новичок в MVC, так что, возможно, это поможет кому-то еще, кто является новым и борется с тем же, что и я.
для меня проблема была вызвана проблемой пространства имен.
я обновил пространство имен проекта в своих классах веб-проектов от MyProject до MyProject.Веб, но я забыл обновить свойства проекта >> пространство имен по умолчанию. Поэтому, когда я добавил новый контроллер, он использовал старое пространство имен. Все, что мне нужно было сделать, это исправить пространство имен в новом контроллере, и это сработало.
у меня был контроллер с именем 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 } ); }
решил проблему, щелкнув правой кнопкой мыши на представлении, которое я хотел в качестве стартовой страницы после отображения ошибки" ресурс, который вы ищете, не может быть найден " просто щелкните правой кнопкой мыши на своем проекте, перейдите в веб и выберите текущую страницу. Это решит проблему

Comments