Actualizado manualmente de MVC3 a MVC4 Beta y obteniendo errores de signo "no válidos @"
-
29-10-2019 - |
Pregunta
Estoy usando Razor en ambos
Cualquier página que use el letrero @. Es casi como el sistema.web.webpages o el system.web.helpers no pueden determinar las vistas
Aquí está el error real:
"@" no es válido al comienzo de un bloque de código. Solo los identificadores, palabras clave, comentarios "(" y "{" son válidos.
Aquí está mi web.config que está en 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=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.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=4.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>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<!--
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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=4.0.0.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>
Solución 2
Resulta que cambiar a MVC4 beta no estaba manejando @@@ escapa correctamente
Tengo un cliente de Twitter donde representará el nombre de la pantalla de una persona en una vista como esta:
@@@TwitterUsername
Esto renderizará a @ con el escapado @@ y luego renderizará el nombre de Twitter con @twitterusername
Esto no funciona con MVC4. Así que tuve que cambiar a esto y funcionó bien:
@Html.Raw("@")@TwitterUsername
No tan bonito, pero funciona.
¿Hay algo que no esté bien con el análisis de afeitar en MVC4 o no estoy haciendo algo bien implementándolo?
La salida de esto es:
@jordanshane
Otros consejos
Consulte MVC 4 Liberación de liberación
Hay una sección que describe Actualización de un proyecto ASP.NET MVC 3 a ASP.NET MVC 4
Tuve un problema similar al actualizar de MVC3 a MVC4 al emitir una 'página' que es un volcado de Excel en formato XML Excel. Por ejemplo, tenía la siguiente línea en mi archivo de diseño de página XML:
No trabajar:
<NumberFormat ss:Format="m/d/yyyy;@@"/>
El analizador me dio el siguiente error:
Mensaje de error de analizador: ""/> "no es válido al inicio de un bloque de código. Solo identificadores, palabras clave, comentarios" ("y" {"son válidos.
La respuesta html.raw ("@") funcionó para mí, y no pude encontrar ningún motivo para este comportamiento en los enlaces que proporcionaron varias otras respuestas. En caso de que alguien esté buscando una solución más breve, aquí hay otra posibilidad:
Lo hace trabajar:
<NumberFormat ss:Format="m/d/yyyy;@('@')"/>