2011-01-26 8 views
14

Estoy tratando de convertir un sitio MVC2 a MVC3 usando RazorViewEngine.MVC3/Razor: cshtml.Execute() ': no ​​se encontró un método adecuado para reemplazar

Usé this tool para actualizar mi proyecto y Telerik converter tool para convertir mis vistas .aspx a Razor. La herramienta Telerik puso una línea @inherits en la parte superior de mis diseños (inherting desde ViewMasterPage).

Cuando traté de correr una página que usa uno de estos diseños, que tiene el error:

...cshtml.Execute(): no suitable method found to override

me quita la etiqueta @inherits y comenzó a trabajar para mi página de inicio. Sin embargo, continué obteniendo este error para otra página usando el mismo diseño. Y ahora, después de mover algunas cosas para lidiar con un problema de Areas, he vuelto a obtener este error para todas mis páginas (a las que puedo acceder, de todos modos).

He intentado cerrar Visual Studio, eliminar archivos temporales, etc.

Respuesta

18

lo descubrió - el siguiente apartado tiene que estar en el web.config de afeitar - Lo tenía en la web.configs en los Views directorios, pero no en el rootweb.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> 
+0

+1 ¡Bien encontrado! – Rob

+11

Esa sección de configuración es técnicamente correcta, pero no la necesita en su raíz web.config. Guárdelo en ~/Views/Web.config, pero solo asegúrese de que pageBaseType = "System.Web.Mvc.WebViewPage", en lugar de "System.Web.Mvc.ViewPage". Acabo de resolver este mismo error en mi aplicación con ese pequeño cambio. – MikeWyatt

+0

@MikeWyatt Estoy lidiando con este mismo problema ahora, y acabo de probar su sugerencia, pero me aparece el siguiente error: System.Web.Mvc.WebViewPage no está permitido aquí porque no extiende System.Web.UI.Page. ¿Alguna idea de lo que puedo hacer? ¡Gracias! – dizzwave

0

Si todavía tiene una copia de seguridad de su proyecto MVC2 me gustaría probar el uso de la herramienta Microsoft lanzó en MSDN para esto. Vea el enlace this para más información. También Scott Guthrie escribió algo al respecto en las publicaciones de su blog cuando se lanzó MVC3, puede leer el artículo here.

Me temo que no puedo darle una solución directa a esto. Pero parece un error o problema en el software de conversión de telerik que usaste.

+0

Ah, sí, esa es en realidad la herramienta que utilicé Luego utilicé la herramienta Telerik para convertir las vistas de aspx en navaja de afeitar. Actualizaré mi publicación. – sydneyos

+0

@sydneyos. ¿Puedes publicar un ejemplo de código de cómo se ve tu archivo CSHTML ahora? – Rob

5

Podría haber algunas cosas sucediendo aquí. Asegúrese de estar siguiendo estas pautas

  • no tiene @inherits directivas en sus puntos de vista. a menos que esté utilizando una clase base de página de vista personalizada, no son necesarios. Para vistas fuertemente tipadas, debe usar la directiva @model para especificar el tipo de modelo. Para vistas escritas semanalmente, no necesitas nada.
  • No mezcle las vistas de la maquinilla de afeitar con las páginas principales aspx (o páginas aspx con diseños de maquinillas de afeitar), ya que no funcionan juntas fácilmente. Esto incluye verificar todos sus métodos de acción donde tenga código como return View("ViewName", "MasterName"), ya que también podría causar el uso de tecnologías de templatign en conflicto.
+0

Gracias - No tengo directivas @inherits y estoy usando directivas @model. Todas las páginas maestras convertidas en diseños. – sydneyos

Cuestiones relacionadas