ASP.NET MVC 3 не распознает.вид cshtml-файлы

я портировал приложение mvc 3 от vs 2010 до vs2012.

портированное приложение использует .NET 4.

все старые биты работают, но с новым представлением, созданным в vs 2012, механизм представления не ищет .cshtml-файлы для просмотра.

например, когда пользователь запрашивает действие индекса на контроллере в зоне адвокаты, адрес:

mysite.com/solicitors/welcome/gg 

(где gg-имя пользователя). В этом случае возвращается ошибка есть:

представление "индекс" или его мастер не найден или нет механизма просмотра поддерживает поиск местоположения. В следующих местах: поиск: ~ / области / адвокаты / просмотры / Добро пожаловать / индекс.аспн ~ / Области / Адвокаты / Просмотры / Добро Пожаловать / Индекс.ascx и ~ / Области / Адвокаты / Просмотры / Общий / Индекс.аспн ~ / Области / Адвокаты / Просмотры / Общий / Индекс.ascx ~ / Views / Добро пожаловать / индекс.аспн ~ / Views / Добро Пожаловать / Индекс.ascx ~ / Views / Shared / Index.аспн ~ / Views / Shared / Index.ascx и ~ / Области / адвокаты / взгляды / Добро пожаловать/gg.мастер ~ / Области / адвокаты / мнения / общий/gg.master ~ / Views / Добро пожаловать/gg.мастер ~ / Просмотры / общий/gg.master ~ / области / адвокаты / просмотры / Добро пожаловать/gg.cshtml по ~ / Области / адвокаты / взгляды / Добро пожаловать/gg.vbhtml по ~ / Области / адвокаты / мнения / общий/gg.cshtml по ~ / Области / адвокаты / мнения / общий/gg.vbhtml ~ / просмотры / Добро пожаловать/gg.cshtml по ~ / Views / Добро пожаловать / gg.vbhtml ~ / просмотры / общий доступ/gg.cshtml по ~ / Просмотры / общий/gg.vbhtml по

Я уже добавил следующий раздел параметр appsettings в web.config, но это не имеет значения.

<add key="webpages:Version" value="1.0" />

EDIT:

маршрут в SolictorAreaRegistration.cs:

context.MapRoute(
                "Solicitors_Welcome",
                "Solicitors/Welcome/{nameUser}",
                new { controller = "Welcome", action = "Index", nameUser = UrlParameter.Optional }
            );

EDIT 2:

используя RouteDebug, я вижу, что правильный контроллер и действие найдены.

Маршрута

Значение Ключа

nameUser: gg

контроллер: Добро пожаловать

действие: индекс

Маркеры Данных

ключ Значение

Пространства Имен: System.String[]

площадь: адвокаты

UseNamespaceFallback: False

EDIT 3:

маршрут найден правильно, как я вижу из отладки: действие индекса поражено.

проблема возникает, когда вызов строки вид вызывается:

namespace MyApp.Areas.Solicitors.Controllers
{
    [Authorize]
    public partial class WelcomeController : Controller
    {
        //
        // GET: /Solicitors/Welcome/
        public virtual ActionResult Index(string nameUser)
        {
            return View("Index", nameUser);
        } 
    }
}

2 ответов


хорошо, добрался до сути:

Проблема:

проблема в том, что модель моего представления имеет тип string. В моем действии я передавал строку в качестве параметра модели:

public virtual ActionResult Index(string nameUser)
        {
            return View("Index", nameUser);
        }

это столкнется с одной из перегрузок контроллера.Вид.(..):

View(string, string)

второй параметр ожидает имя файла макета. Когда вы это делаете, MVC отправляется на поиски файла макета с именем значения вашей строки, которое может быть, например:

"Привет, Мир. Я идиот, но если вы дадите мне приличное сообщение об ошибке, я, возможно, смогу исправить ошибку."

очевидно, что файл макета с этим именем не существует. Также нет файла макета под названием " gg " (имя пользователя моего (тестового) адвоката).

Решение:

решение простое:

укажите, что вторым параметром является модель, а не макет.

public virtual ActionResult Index(string nameUser)
        {
            return View("Index", model: nameUser);
        }

полезное Статья:

чтобы просмотреть расширенное обсуждение этого вопроса, см. следующую статью:

MVC Gotcha: остерегайтесь при использовании модели вашего представления-это строка

большое спасибо heartysoft.com для просветления.


Это смотря как вы можете видеть из сообщения об ошибке:

~/Areas/Solicitors/Views/Welcome/gg.cshtml 

Если вам нужно искать представление индекса, вам нужно указать его:

http://mysite.com/solicitors/welcome/index/gg