Проблемы с получением бритвы и aspx, чтобы играть красиво - PullRequest
2 голосов
/ 18 июня 2011

Я работаю над преобразованием некоторых частичных представлений в моем приложении MVC 3 (которое я недавно преобразовал из MVC 2, используя инструмент MS) из ascx в cshtml (Razor).

Проще говоря: я пытаюсь сделать Html.RenderPartial частичного представления Razor, непосредственно с главной страницы aspx.Частичное представление Razor просто содержит "Hello World" - без @model, @inherits или чего-либо еще.Когда я запускаю свое приложение, в этот момент я получаю следующую ошибку: «Представление в ..... cshtml должно быть производным от ViewPage, ViewPage, ViewUserControl или ViewUserControl».Другими словами, похоже, что он ищет не бритвенное представление.

Итак. Если я явно поставлю "@inherits ViewUserControl" наверху моей частичной бритвы, я получу другую ошибку: "...cshtml.Execute (): не найден подходящий метод для переопределения. "

Я создал новое приложение MVC 3 с нуля и попробовал то же самое в самом простом.Главная страница aspx, которая делает RenderPartial на частичке бритвы.И это прекрасно работает.Но это большое волосатое существующее приложение слишком велико, чтобы начинать с нуля ... Но что-то там мешает этому работать.

Это может выглядеть как дубликат некоторых других вопросов, но яперепробовал все из тех что нашел.Я даже удалил MVC 2 с моей машины.Предложения / помощь будут приветствоваться!

Спасибо ...

Ответы [ 2 ]

2 голосов
/ 19 июня 2011

Попробуйте сравнить два проекта, чтобы увидеть, есть ли какие-либо существенные различия - в частности, Web.config (хотя, возможно, настройки в csproj тоже).Такие вещи, как базовый тип, используемый для представлений / страниц, хранятся в web.config, поэтому возможно, что они установлены неправильно или вообще отсутствуют в вашем исходном проекте.

Проект MVC по умолчанию имеет такие вещи вфайл web.config в папке представлений:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">

и

<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
1 голос
/ 21 июня 2011

Отвечая на мой вопрос здесь ..

Оказывается, что приложение MVC 2 (о котором я не писал, кстати) использовало пользовательский ViewEngine, производный от WebFormViewEngine. Когда я преобразовал свой частичный вид в бритву, я добавил «~ / Views / Shared / Modules / {0} .cshtml» в массив местоположений в этом классе, не осознавая, что он будет использовать WebFormViewEngine.

Итак, я закончил тем, что создал свой собственный ViewEngine, производный от RazorViewEngine ... и вместо этого добавил к нему свой путь / Modules. Это работает!

Помочь было начинать заново и вручную конвертировать приложение в MVC 3 (спасибо еще раз Darin D), потому что оно заставило меня пройти все шаги самостоятельно и заставило меня найти эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...