Visual Studio 2013 mvc для изменения страницы каждый раз требуется чистое решение для перестройки

У меня возникла странная проблема с проектом mvc (Visual Studio Premium 2013). Всякий раз, когда я делаю даже самое маленькое изменение в представлении .cshtml, я всегда получаю сообщение «Ошибка сервера в приложении '/'. Ресурс не может быть найден». Я должен несколько раз очистить и перестроить свой проект, чтобы он заработал. Но если после изменения (простой модификации в представлении .cshtml) я помещаю точку останова где-нибудь в коде, выполняемом в контроллере, когда это представление запрашивается браузером, тогда все работает нормально, без ошибок и изменение немедленно отражается в браузере. Поскольку я новичок в mvc (но не в .net asp.net, я исхожу из веб-форм), я пытаюсь понять некоторые ключевые концепции.

Я изменил маршрутизацию по умолчанию на:

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

Вы можете видеть, что я изменил имена по умолчанию: Home -> Index, Action Index -> GetIndexPage.

Я также обновил код в своем контроллере соответственно:

        IndexController
             GetIndexPage()
                   return View(...)

Как я уже сказал, это работает нормально в первый раз, или после нескольких решений очистки и сборки или точки останова внутри GetIndexPage ()

Используя встроенный отладчик браузера Chrome, я увидел это исключение:

HttpException: A public action method "Index" was not found on controller IndexController
at System....Controller.HandelUnknownAction(string actionname)

Почему он ищет индекс действия, когда в настройках по умолчанию я специально упомянул GetIndexPage?


person TheSoul    schedule 02.08.2014    source источник
comment
Это сложно. Вы используете сервер разработки или IIS Express (в свойствах вашего проекта)? Кроме того, вы можете override защищенный метод HandleUnknownAction, установить точку останова и заглянуть в словарь маршрута контекста контроллера (ключи «контроллер» и «действие»), чтобы точно определить, где, по мнению MVC, он должен искать.   -  person Christopher Stevenson    schedule 03.08.2014
comment
Как правило, странные ошибки связаны с необновляемыми отладочными dll. Вы можете очистить папки «obj» и «bin» в своем проекте и перестроить. Это может помочь.   -  person Christopher Stevenson    schedule 03.08.2014
comment
Я просто проверяю обработчик HandleUnknownAction и в словаре RouteData значениями являются Index для контроллера и Index для действия вместо Index и GetIndexPage. Также использую Сервер разработки IIS express от visual studio. Если проблема связана с папками «obj» и «dll», есть ли возможность сделать это автоматически перед любым запуском вместо того, чтобы делать это вручную для каждой модификации? Спасибо за Ваш быстрый ответ!   -  person TheSoul    schedule 03.08.2014
comment
Есть ли у вас какие-либо другие маршруты, определенные до этого, которые могут вызывать проблему?   -  person    schedule 03.08.2014
comment
Теперь я вижу, что он работает при каждом втором запуске: всякий раз, когда я вношу изменение, я получаю сообщение об ошибке при первом запуске проекта сразу после изменения. Но когда я запускаю его второй раз, все работает отлично. Определенно должна быть проблема с .dll и развертыванием (я использую Chrome и Firefox для своих тестов)   -  person TheSoul    schedule 03.08.2014
comment
@Stephen Muecke, нет, это единственный настроенный маршрут   -  person TheSoul    schedule 03.08.2014
comment
Вот аналогичный вопрос, который я нашел, но без ответа social.msdn.microsoft.com/Forums/en-US/   -  person TheSoul    schedule 03.08.2014
comment
Есть ли у вас виды с @using (Html.BeginForm(new { ReturnUrl = ..., где вы могли установить ReturnUrl на неправильное значение?   -  person    schedule 03.08.2014
comment
@stephen нет. url устанавливается только через конфигурацию маршрутизации.   -  person TheSoul    schedule 03.08.2014
comment
Это точно глюк в dll. Если хотите, вы можете использовать инструмент обратной связи VS2013, чтобы сообщить об ошибке. Приличным обходным решением было бы очистить и перестроить ваш проект перед его запуском. Очистка папок bin и obj - шаг вперед по сравнению с этим. Чтобы ускорить это, есть команда PowerShell, плавающая вокруг.   -  person Christopher Stevenson    schedule 03.08.2014