Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Не удаётся загрузить страницу приложения MVC


Автор: rigorMortis 1.5.2014, 17:41
Привет
Подскажите плз кто знает, давно мучаюсь.
Создал простое asp.net веб-приложение MVC 4, опубликовал успешно на локальном IIS. При попытке загрузить страницу http://localhost/<name>/View...me/Index.cshtml выдаёт ошибку:

Ошибка сервера в приложении '/<name>'

Описание: HTTP 404. Возможно, искомый ресурс (или один из зависимых от него компонентов) удален, получил другое имя или временно недоступен. Просмотрите следующий URL-адрес и проверьте, что он введен правильно. 

Кто знает чего делать с этим?

При этом обычный веб-сайт нормально грузится например по такому адресу:

http://localhost/website2/Default.aspx

VS 2010
Windows 7

Автор: Cheloveck 2.5.2014, 12:30
ASP.NET MVC не может работать в Classic mode, надо переключить прилагу в пул с Integrated mode.
user posted image

user posted image

Автор: rigorMortis 4.5.2014, 01:46
Ну, вроде заработало. 

А такой вопрос: в контроллере есть метод 

        public ActionResult Index()
        {
            return View("~/Views/book/Index.cshtml");
        }

Представление Index.cshtml находится в папке ~/Views/book. При попытке загрузить страницу http://localhost/book/Index пишет:

Ошибка сервера в приложении '/'.
--------------------------------------------------------------------------------

Не удалось найти данный ресурс. 
Описание: HTTP 404. Возможно, искомый ресурс (или один из зависимых от него компонентов) удален, получил другое имя или временно недоступен. Просмотрите следующий URL-адрес и проверьте, что он введен правильно. 
Запрошенный URL: /book/Index


Страница успешно загружается только если она в папке ~/Views/ChangePassword. Как сделать чтобы представление загружалось по указанному во View пути?

Автор: Экскалупатор 4.5.2014, 03:14
надо изучить тему Routing, и соглашение про именование контроллеров, представлений и прочее.
в MVC нету пути к файлу в папке, путь ведет к методу контроллера, который в свою очередь вернет view(или не вернет, смотря что в нем будет прописано). 

Код

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );


исходя из этого адресА должны быть вида: domen.com/books/index

books - это контроллер
index - метод контроллера

и не надо писать "View("~/Views/book/Index.cshtml");", по идее MVC попытается найти требуемое представление исходя из именования файлов и именования метода контроллера. можно создать стандартное MVC приложение в студии и там все разложено по папкам так как и должно быть.
т.е.
Код

    public class BookController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();// <- именно так, без указания пути
        }
   }

в данном случае MVC будет искать представление с именем Index, в папке Book. (Views/Book/Index.chtml)
И если не найдет то будет искать в других местах(но это уже отдельная тема)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)