tutorial sintaxis net mvc ejemplos cshtml code asp c# razor asp.net-mvc-4

c# - sintaxis - Razor Views no ve System.Web.Mvc.HtmlHelper



razor insert c# code (22)

Estoy en el proceso de actualizar a MVC4. He seguido las instrucciones en http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806 pero en mis vistas y diseños de Razor tengo errores como

  • ''System.Web.WebPages.Html.HtmlHelper'' no contiene una definición para ''BeginRouteForm'' y no se puede encontrar ningún método de extensión ''BeginRouteForm'' que acepte un primer argumento de tipo ''System.Web.WebPages.Html.HtmlHelper'' (¿está usted ¿falta una directiva using o una referencia de ensamblado?)

También tengo errores como:

  • "El nombre ''Viewbag'' no existe en el contexto actual

Cuando cierro sobre @Html puedo ver que es del tipo System.Web.WebPages.Html.HtmlHelper no System.Web.Mvc.HtmlHelper

No estoy seguro de qué otra información es pertinente, pero aquí es donde estoy:

  • No he actualizado las bibliotecas de clase, etc. en sln a .net 4.5 todavía.
  • El proyecto fue creado en VS2010, pero estoy haciendo la migración en VS2012
  • El proyecto se abre y funciona bien con VS2012, .Net 4.0, MVC 3

Cualquier puntero apreciado.

Editar: todas las referencias y archivos en web.config actualizados a:

  • System.Web.Mvc, Version = 4.0.0.0
  • System.Web.WebPages, Version = 2.0.0.0
  • System.Web.Helpers, Version = 2.0.0.0
  • System.Web.WebPages.Razor, Version = 2.0.0.0

Editar (2): en mi /views/web.config (o /views/shared/web.config si pruebo la solución de @Paul a continuación) en el elemento, tengo mi propio tipo de base que hereda de System.Web. Mvc.WebViewPage, las referencias en la biblioteca que lo contiene se han actualizado a MVC4 y vaya a la definición que me lleva al dll MVC4.

¿Ha cambiado algo en esta área en la nueva versión? No pude ver nada pertinente en las notas de la versión.


Actualización para los usuarios de Visual Studio 2017:

Si acaba de migrar a Visual Studio 2017 y su proyecto es MVC4, asegúrese de volver al Instalador VS2017 y verifique la opción MVC4 en la sección "ASP.NET y desarrollo web". Es un componente opcional y no está marcado por defecto.

Esto resolvió mi problema


Como una variación de un tema, podría haber jurado que mi Views / Web.config era correcta:

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Pero de hecho necesitaba hacer referencia a la Version=4.0.0.1 , no a la Version=4.0.0.0 debido a esa actualización de seguridad que se expulsó hace un tiempo.


Correcto, he estado tratando de solucionar este problema por algún tiempo. He utilizado todas las soluciones en los diversos temas de con respecto a esto y ninguno parecía estar funcionando.

Acabo de arreglar el problema esta mañana. Después de que haya arreglado el archivo web.config tanto para el proyecto como para las vistas, asegúrese de que todas las versiones .dll coincidan con lo que tiene en la carpeta de referencias. Deberá descargar el proyecto, editar .csproj y luego actualizar todas las versiones .dll en ese archivo.

System.Web.Helpers System.Web.Mvc System.Web.WebPages

Espero que esto ayude, ¡ya que finalmente he resuelto este problema! No más líneas rojas onduladas.

Esto también ha solucionado el problema del menú contextual que estaba teniendo, no tenía la opción de agregar un controlador, ver, etc.



Después de haber intentado todo en vano, descubrí que en mi caso no funcionaba debido a un valor de atributo incorrecto en el archivo csproj de Web Project. Cuando cambio ToolsVersion a 14 , que coincide con mi versión IDE actual (es decir, Visual Studio 2015), todo funcionó como un amuleto:

<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)/$(MSBuildToolsVersion)/Microsoft.Common.props" Condition= .....


Ejecuté un proyecto limpio, e instalé o volví a instalar todo y seguí recibiendo muchos errores de Intellisense, a pesar de que mi sitio se estaba compilando y ejecutándose correctamente. Intellisense finalmente funcionó para mí cuando cambié los números de versión en mi archivo web.config en la carpeta Vistas. En mi caso estoy codificando un módulo en Orchard, que se ejecuta en un área de MVC, pero creo que esto ayudará a cualquiera que use la última versión de MVC. Aquí está mi web.config de la carpeta Vistas

<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.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=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="Orchard.Mvc.ViewEngines.Razor.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.Linq" /> <add namespace="System.Collections.Generic" /> </namespaces> </pages> </system.web.webPages.razor> <system.web> <!-- Enabling request validation in view pages would cause validation to occur after the input has already been processed by the controller. By default MVC performs request validation before a controller processes the input. To change this behavior apply the ValidateInputAttribute to a controller or action. --> <pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <controls> <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" namespace="System.Web.Mvc" tagPrefix="mvc" /> </controls> </pages> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <remove name="BlockViewHandler"/> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> </handlers> </system.webServer> </configuration>


En cuanto a mí, fue un error de implementación estúpido: los proyectos web pueden tener más de un web.config. Estaba trabajando en la máquina del desarrollador y no en la producción, pero no nos dábamos cuenta de que la secuencia de comandos de implementación solo agarraba el archivo Web.config en la raíz y no copiaba el archivo Web.config en la carpeta Views .


En el mundo de la contratación, a menudo uso máquinas que usan imágenes antiguas. Después de probar todo lo anterior, decidí actualizar mi VS 2013 a la versión más reciente (Actualización 4). ¡Después de 90 minutos y un reinicio las referencias están funcionando bien ahora! ¡Espero que esto ayude!


Encontré varias respuestas en SO y al final me di cuenta de que mi error era que había escrito mal "Html.TextBoxFor". En mi caso, lo que escribí fue "Html.TextboxFor". No en mayúscula la B en TextBoxFor. Corregido eso y voilà. Problema resuelto. Espero que esto ayude a alguien.


Estaba lidiando con este problema después de actualizar de Visual Studio 2013 a Visual Studio 2015 Después de probar la mayoría de los consejos encontrados en esta y otras publicaciones SO similares, finalmente encontré el problema. La primera parte del arreglo fue actualizar todas mis cosas de NuGet a la última versión (es posible que necesites hacer esto en VS13 si experimentas el error de Nuget ) después, tuve que, como sea necesario, corregir las versiones enumerados en las vistas Web.config . Esto incluye:

  1. MVC versiones de MVC y sus bibliotecas secundarias en la nueva versión (expanda las References luego haga clic derecho en Sytem.Web.MVC luego en Properties para obtener su versión)
  2. Arregla la versión Razor .

El mío se veía así:

<configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.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=5.2.3.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.Optimization"/> <add namespace="System.Web.Routing" /> </namespaces> </pages> </system.web.webPages.razor> <appSettings> <add key="webpages:Enabled" value="false" /> </appSettings> <system.web> <httpHandlers> <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> </httpHandlers> <pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <controls> <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> </controls> </pages> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <remove name="BlockViewHandler"/> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> </handlers> </system.webServer> </configuration>


Me he encontrado con este problema específico también; no (o incorrecto) intellisense que se muestra al tratar de usar etiquetas de afeitar. Mi problema específico fue VS2015 quejándose de que Html.BeginForm no existía en el contexto actual.

Tengo áreas configuradas en mi proyecto MVC y logré reducir la causa de mi error al archivo web.config para un área específica, en lugar de la web.config global.

Resultó que la causa de este problema para mí era que había agregado un SQL connectionString en el web.config para el área que no estaba funcionando, esto (supongo) causó un error de análisis, sin embargo, el proyecto se compiló correctamente .

Mover el connectionString al web.config global ha rectificado el problema. Con suerte, esto puede ser de alguna utilidad para otros.


Mi situación solo ocurrió después de que creé una clase personalizada llamada BaseViewPage que WebViewPage clase WebViewPage . Inicialmente, agregué lo siguiente a mi archivo Main Web.confg:

<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">

Y lo mismo para el archivo Ver carpetas web.config:

<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">

Intenté muchas de las otras respuestas y ninguna hizo el truco al mismo tiempo que me permitía mantener mi clase de BaseViewPage . La forma en que lo arreglé fue eliminar el atributo pageBaseType solo del archivo Main Web.config. Guárdelo en la vista web.config.



Para mí, la solución fue cambiar lo siguiente:

<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <controls> <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> </controls> </pages>


Probé todas las soluciones aquí, pero ninguna de ellas funcionó para mí. De nuevo, mi sitio funciona bien, pero no tengo intellisense y obtengo líneas onduladas rojas bajo muchas cosas en mi opinión que Visual Studio no reconoce, una de ellas es Html.BeginForm() , así como cualquier cosa que tenga que ver con ViewBag .

Estoy trabajando con un nuevo proyecto MVC 5. Después de horas de comparar las líneas web.config, finalmente encontré lo que me solucionó.

Mi web.config en mi raíz tenía la siguiente línea:

<system.web> <compilation debug="true" targetFramework="4.5" /> <!-- ... --> </system.web>

Lo comparé con un proyecto anterior que no usó MVC 5, y copié sobre un bloque que noté que faltaba en el nuevo, que era el siguiente:

<system.web> <compilation debug="true" targetFramework="4.5"> <assemblies> <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </assemblies> </compilation> <!-- ... --> </system.web>

Copié el bloque anterior al web.config de mi nuevo proyecto en la raíz, cambiando las versiones para que coincidan con los números de cada ensamblaje encontrado en las referencias de mi proyecto (haciendo clic derecho en cada referencia mencionada y seleccionando "Propiedades", se da "Versión") en la parte inferior de la ventana de propiedades para la referencia seleccionada).

Después de implementar lo anterior, ahora tengo intellisense y no obtengo ninguna línea roja desconocida en cosas como Html.BeginForm , ViewBag.Title , etc.


Recientemente recibí el mismo problema y así es como lo solucioné: en Visual Studio con su proyecto en cuestión abierto, vaya a:

  1. Herramientas -> Gestor de paquetes NuGet -> Gestionar paquetes NuGet para la solución .
  2. En la ventana abierta, seleccione Actualizaciones . luego haz clic en Actualizar todo .

Cargará lo que falta en su proyecto y todos deberían volver a la normalidad.



Solo para ampliar la respuesta de Matt DeKrey, simplemente borrando el archivo csproj.user (sin necesidad de volver a crear soluciones) fue capaz de solucionar el problema.

El único efecto secundario que tuve fue que debía restablecer la Acción de inicio para usar una página específica.


Tuve el mismo problema al actualizar a MVC 5 y se solucionó actualizando el archivo web.config dentro de la carpeta Vistas.

<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.Optimization"/> <add namespace="System.Web.Routing" /> </namespaces> </pages>

El host -> factoryType se configuró en la versión: 4.0.0.0. Espero que esto ayude a cualquiera.


Usé el siguiente artículo en MSDN para resolver este problema (en este caso de MVC 4 a MVC 5)

https://docs.microsoft.com/en-us/aspnet/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

Los principales extractos del artículo son:

Main Web.config (No el de la carpeta Views)

En el bloque de tiempo de ejecución, actualice System.Web.Mvc a 5.0.0.0, System.Web.Helpers a 3.0.0.0 y System.Web.WebPages a 3.0.0.0

<dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly>

A continuación, busque el bloque de aplicaciones y actualice las páginas web: valor de la versión a 3.0.0.0

<appSettings> <add key="webpages:Version" value="3.0.0.0" /> </appSettings>

Vistas Web.config

Actualice el bloque factoryType del host a System.Web.Mvc a 5.0.0.0

<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" /> </namespaces> </pages> </system.web.webPages.razor>

Luego, debajo del bloque de páginas actualice cualquier referencia a System.Web.Mvc a 5.0.0.0

<pages       validateRequest="false"       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"       userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">     <controls>       <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />     </controls>   </pages>

Y finalmente, bajo la actualización del bloque de configuración, las referencias de System.Web a 3.0.0.0

<configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections>


Me encontré con este problema con una aplicación web: mis archivos .cshtml se atascaron en la clase base System.Web.WebPages.WebViewPage cuando necesitaba System.Web.Mvc.WebViewPage .

Primero, asegúrese de que su archivo ~ / Views / web.config tenga el pageBaseType correcto. En mi caso, configuré System.Web.Mvc.WebViewPage .

<configuration> <system.web.webPages.razor> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <!-- ... --> </pages> </system.web.webPages.razor> </configuration>

Entonces, lo que es más importante , algunas personas han descubierto que esto es clave si lo anterior ya es bueno:

  1. Ejecute una limpieza en la solución
  2. Descargar el proyecto con los problemas
  3. Elimine el archivo .user que generó Visual Studio junto al proyecto.
  4. Recargar el proyecto con los problemas
  5. Construye la solución

Para VS2015 , los archivos .user y .sln han movido a la carpeta oculta .vs que se crea al lado del archivo .sln . Sin embargo, de los comentarios a continuación, los mensajes de error implican que la herramienta está utilizando la versión incorrecta de MVC por completo, y eliminar esta carpeta no soluciona el problema. Que yo sepa, no hay una solución conocida.


*<system.web> <compilation debug="true" targetFramework="4.5"> <assemblies> <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </assemblies> </compilation>*

Falta esta configuración, agréguela y configure la versión adecuada de los ensamblajes