No sé si esto ocurría en la PR o en la Beta, pero si puedo crear un método de extensión en HtmlHelper, no es reconocido en una navaja de Afeitar powered página:

namespace SomeNamespace.Extensions {
    public static class HtmlExtensions {
        public static string Foo(this HtmlHelper html) {
            return "Foo";
        }
    }
}

He añadido a la <Namespaces> sección en Web.config:

<pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <!-- snip -->
    <add namespace="SomeNamespace.Extensions"/>
  </namespaces>
</pages>

Pero lanza un error de compilación al intentar ver la página:

@Html.Foo()

Si puedo volver a crear la página con WebForms funciona bien. ¿Cuál es el trato?

Solución

Si tengo que incluir @using SomeNamespace.Extensions en mi maquinilla de Afeitar de la vista, entonces funciona, pero me gustaría mucho más tener en Web.config

  • Incluso la solución no funciona para mí. El método de extensión se mostrará en intelliSense, pero produce un error de compilación en tiempo de ejecución.
  • +1 para el @utilizando la solución. Yo lo prefiero en mi caso.
  • la solución es aceptar de una sola vista. Pero múltiples puntos de vista de la gestión de código se convierte en un problema.
InformationsquelleAutor swilliams | 2010-11-09

8 Comentarios

  1. 273

    Desde la versión Beta, Razor usa una configuración diferente de la sección a nivel mundial para la definición de espacio de nombres de las importaciones. En su Views\Web.config archivo se debe añadir lo siguiente:

    <configSections>
      <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      </sectionGroup>
    </configSections>
    
    <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" />
          <!-- Your namespace here -->
        </namespaces>
      </pages>
    </system.web.webPages.razor>

    Utilizar el MVC 3 herramienta de actualización automáticamente para asegurarse de que tienen derecho los valores de la configuración.

    Nota que usted puede ser que necesite para cerrar y volver a abrir el archivo para que los cambios han de ser recogidos por el editor.

    • De Bingo. Gracias! ¿Sabe usted si que es lo que siempre va a funcionar o va a ser cambiado en la versión RTM?
    • En este punto hay una muy baja probablility que nos iba a cambiar esto. Es casi seguro que funciona de la misma manera en RTM.
    • Y cómo sería este trabajo con las Áreas, si quiero compartir un espacio de nombres con todas mis Áreas? Con el viejo motor puedo agregar mis espacios de nombres en el web raíz.config, que se encarga de eso, pero, ¿cómo funcionaría esto con maquinilla de Afeitar?
    • Siento que me falta una referencia de ensamblado? Que no reconoce el Sistema.Web.Mvc.WebViewPage o de cualquiera de los tipos en el configSections sección.
    • el nombre del tipo es correcta. Está usted seguro de que está utilizando MVC 3?
    • Sí, yo estoy usando MVC 3. Creo que resharper fue falsamente destacando Sistema.Web.Mvc.WebViewPage y de todos los tipos en el configSections sección. Que puede ser un síntoma del verdadero problema. Si yo comente la línea en el punto de vista de que está utilizando el método de extensión que funciona bien, pero si intento utilizar el método de extensión obtengo un error de compilación.
    • He tenido que añadir una referencia a >Sistema.Web.Las páginas web.Navaja de afeitar y se ordenan a cabo.
    • No funciona para mí. Estoy usando MVC 3 RC , he añadido mi espacio de nombres para la web.config en mi carpeta vistas. Todavía puedo ver a mis extensiones en máquina de Afeitar de la página. Evento poniendo @con <extensionname> no funciona. @ TWith2Sugars ni siquiera puedo encontrar el Sistema.Web.Las páginas web.Maquinilla de afeitar para agregar , he añadido Sistema.Web.Maquinilla de afeitar, pero no ayuda. Realmente estoy atascado aquí
    • +1 por contar conmigo para abrir y cerrar el archivo para ver las actualizaciones.
    • vuelva a abrir», que se aplica y para RTM demasiado. Esperemos que se fija en algún momento, es que Visual studio problema?.
    • Si tengo que incluir el <configSections> declaración anterior y/o en ambos bloques de código, me sale «no se puede iniciar la depuración en el servidor web, por favor revise su web.config», etc. Me lo saco, funciona bien. Estoy usando MVC 3. Los pensamientos?
    • Gracias por señalar que esta no es la raíz de la web.config, pero la web.de configuración en la Vista de carpeta!
    • Sólo quería que todo el mundo sepa que no se puede incluir un archivo directa, tiene que ser el espacio de nombres >.<

  2. 11

    Como el aceptado respuesta sugiere usted puede agregar «utilizando» a todos los puntos de vista mediante la adición de la sección de archivo de configuración.

    Pero para una sola vista sólo podría utilizar

    @usando SomeNamespace.Extensiones de

  3. 6

    Tuve este mismo error en un MVC 4 aplicación de uso de la maquinilla de Afeitar. En un intento de limpiar la web.los archivos de configuración, he quitado los dos webpages: los valores de configuración:

    <appSettings>
      <add key="webpages:Version" value="2.0.0.0" />
      <add key="webpages:Enabled" value="false" />

    Una vez he restaurado estos valores de configuración, las páginas se compila correctamente y los errores relativos a la .Partial() método de extensión desaparecido.

    • Esto en combinación con la respuesta de marcind ayudado a solucionar mis problemas…
  4. 5

    Yo tenía este problema en el VS de 2015.
    El siguiente resuelto por mí:

    Encontrar «páginas web:la Versión» en el appsettings y actualizar a la versión 3.0.0.0. A mi web.config había

    <add key="webpages:Version" value="2.0.0.0" />

    y he actualizado a

    <add key="webpages:Version" value="3.0.0.0" />
  5. 3

    He encontrado es que al poner esta sección en mi web.config para cada vista de carpeta resuelto.

    <runtime>
            <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                <dependentAssembly>
                    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
                    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="4.0.0.0" />
                </dependentAssembly>
            </assemblyBinding>
        </runtime>
    • De hecho, encontré que, por alguna razón, la RAÍZ de la web.config había una redirección de enlace que fue el causante de mi problema (en concreto, apunta 0.0.0.0-2.0.0.0 a 1.0.0.0), y el /View/web.config archivo no invalida que. (También, no creo que se necesite en cada /View/Subfolder/)
  6. 1

    Este error indica que no tiene la maquinilla de afeitar del motor correctamente asociados con el proyecto.

    Solución: En la ventana Explorador de soluciones clic derecho en tu proyecto web y seleccione «Manage Nuget Packages…», a continuación, instalar «Microsoft ASP.NET maquinilla de Afeitar». Esto se asegurará de que el paquete está instalado y agregará las entradas necesarias en su web.el archivo config.

  7. -6

    Desde ASP.NET MVC 3 RTM está ahí fuera hay necesidad de que la sección de configuración para la maquinilla de Afeitar. Y estas secciones se pueden quitar de forma segura.

    • Me pregunto si eso es cierto, nick4eva. Si puedo crear un nuevo MVC 3 aplicación web, y eligió la maquinilla de Afeitar viewengine, la web.config, que está presente en la carpeta Views, tendrá la maquinilla de afeitar configSections por defecto. Si puedo deshabilitar ellos, voy a tener errores de compilación en tiempo de ejecución.
    • MichaelvR, sí fue mi error. Siento que usted entró en la confusión.
    • ¿Esto también se cuentan VB powered proyecto de MVC? No puedo acceder a mi los métodos de extensión… stackoverflow.com/questions/4789273/…
    • Esta respuesta es errónea. Estas entradas de configuración, aún son necesarios. Las nuevas plantillas de proyecto ya tiene pero si va a actualizar una aplicación Mvc 2, usted tendrá que agregar.

Dejar respuesta

Please enter your comment!
Please enter your name here