Подтвердить что ты не робот

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);
    }
    }
 }
4b9b3361

Ответ 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

Устранена проблема, щелкнув правой кнопкой мыши на представлении, которое я хотел в качестве начальной страницы. После отображения ошибки "Ресурс, который вы ищете, не найден" Просто нажмите правой кнопкой мыши на свой проект, перейдите в Интернет и выберите "Текущая страница". Это решит проблему.