MVC3/Razor: cshtml.Execute() ': не найдено подходящего метода для переопределения
Я пытаюсь преобразовать сайт MVC2 в MVC3 с помощью RazorViewEngine.
Я использовал этот инструмент для обновления моего проекта и Telerik конвертер, чтобы преобразовать мои .aspx-представления в Razor. Инструмент Telerik поместил строку @inherits
в начало моих макетов (наследование из ViewMasterPage).
Когда я попытался запустить страницу, использующую один из этих макетов, я получил ошибку:
... cshtml.Execute(): не найдено подходящего метода для переопределения
Я удалил тег @inherits
и начал работать на моей домашней странице. Тем не менее, я продолжал получать эту ошибку для другой страницы с использованием того же макета. И теперь, переместив некоторые вещи, чтобы разобраться с проблемой Areas, я вернусь к этой ошибке для всех моих страниц (к тем, к чему я могу добраться, во всяком случае).
Я попытался закрыть Visual Studio, удалив временные файлы и т.д.
Ответы
Ответ 1
Выясните, что следующий раздел должен быть в web.config
для бритвы - я имел его в каталоге web.configs
в каталогах Views
, но не в root
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">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
Ответ 2
Здесь может быть несколько вещей. Убедитесь, что вы следуете этим рекомендациям.
- У вас нет директив
@inherits
в ваших представлениях. если вы не используете специальный класс страницы просмотра, они не нужны. Для строго типизированных представлений вы должны использовать директиву @model
, чтобы указать тип модели. Для недельных типов вам ничего не нужно.
- не смешивайте представления бритвы с основными страницами aspx (или страницами aspx с бритвенными макетами), так как они не работают вместе легко. Это включает проверку всех ваших методов действий, где у вас есть код типа
return View("ViewName", "MasterName")
, поскольку это может также привести к конфликтующим технологиям templatign.
Ответ 3
Если у вас все еще есть резервная копия проекта MVC2, я бы попытался использовать инструмент Microsoft, выпущенный для MSDN для этого. См. эту ссылку для получения дополнительной информации. Также Скотт Гатри написал что-то об этом в своих блогах, когда был выпущен MVC3, вы можете прочитать статью здесь.
Боюсь, я не могу дать вам прямое решение. Но звучит как ошибка или проблема в программном обеспечении преобразования из telerik, который вы использовали.