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, который вы использовали.