sintaxis net mvc extension cshtml code asp c# asp.net .net asp.net-mvc razorengine

c# - net - razor html



¿Cómo hacer que intellisense funcione con RazorEngine? (3)

Estoy intentando configurar RazorEngine para que intellisense funcione en las vistas. Añado RazorEngine y Microsoft.AspNet.Mvc usando nuget. Creo TestView.cshtml y declaro @model MyModel pero dice que The name ''model'' does not exist in the current context . Tampoco puedo usar intellisense dentro de la vista.

¿Echo de menos algún paso aquí? ¿Cómo habilitar intellisense en la vista?


Oh, me enfrenté a ese problema al agregar Razor Engine a mi proyecto dll personalizado. Para resolver esto tienes que:

1. Configure correctamente los espacios de nombres en el archivo de configuración web (espero que lo tenga en la carpeta de vistas, si no es así, copie del proyecto MVC):

<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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" /> <add namespace="System.Web.Optimization" /> </namespaces> </pages> </system.web.webPages.razor> ...

2.Utilizar para compilar en bin/ path (no en ningún otro, puede usar el comando copiar posterior a la compilación para mover los resultados a otro lugar)

3. limpie la solución y elimine las carpetas obj y bin , que compile

El código de mis vistas comienza desde @model MyModelClass y todo funciona bien


Puedes usar

@using RazorEngine.Templating @using Namespace.Of.My.Model @inherits TemplateBase<MyModel>

en la parte superior de su plantilla.

Esto funciona bien en una nueva aplicación de consola con Visual Studio 2013 (después de agregar una referencia a RazorEngine). La documentación para esto está here .

EDITAR:

Noté que esto solo funciona cuando el proyecto RazorEngine se agrega a la solución y se hace referencia directa. Si usa el paquete NuGet, también necesita asegurarse de uno de los siguientes para que funcione:

  1. La ruta de salida de su proyecto se establece en bin/ lugar de bin/Debug/ y bin/Release/ .
  2. Copie RazorEngine.dll y System.Web.Razor.dll a bin/

Sé que esta pregunta es algo vieja. No pude conseguir que nada funcionara, sin importar la solución. Tengo una solución de pirateo que puede ser aceptable para algunos. No me gusta mucho, pero es la cosa más útil que he recibido hasta ahora.

El truco es definir el "Modelo" como una variable del Modelo real. Lo definí como "TrueModel", pero cualquier nombre que se te ocurra que no coincida con "modelo" o "Modelo" debería funcionar. Luego simplemente reemplaza todas tus instancias de "Modelo" con "TrueModel".

@using Namespace.To.My.Models @* This line should still look like an error, but we only really care about the intellisense in the rest of the .cshtml file. *@ @{ ModelType TrueModel = (ModelType)Model; } <div> @TrueModel.MyProperty is here now. </div> <p> @TrueModel.MyOtherProperty is great! </p>

No es una gran solución, pero podría ser útil.