Saltar al contenido

El nombre ‘__o’ no existe en el contexto actual

Hola usuario de nuestro sitio, descubrimos la solución a tu búsqueda, continúa leyendo y la encontrarás más abajo.

Solución:

Descubrí que si elijo Solo construir en vez de Construir + IntelliSense los errores (relacionados con IntelliSense) desaparecerán.

ingrese la descripción de la imagen aquí

Actualización 1: La razón

La razón por la que esto sucede es que para códigos como este:

<% if (true)  %>
    <%=1%>
<%  %>
<%=2%>

Para proporcionar IntelliSense en <%= %> bloques en tiempo de diseño, ASP.NET genera la asignación a una variable __o temporal y un lenguaje (VB o C#) y luego proporciona el IntelliSense para la variable. Eso se hace cuando el compilador de la página ve la primera <%= ... %> cuadra. Pero aquí, el bloque está dentro del if, por lo que después de que se cierra, la variable queda fuera del alcance. Terminamos generando algo como esto:

if (true)  
    object @__o;
    @__o = 1;

@__o = 2;

La solución consiste en agregar una expresión ficticia al principio de la página. P.ej

<%=""%>

Esto no generará nada, y se asegurará de que __o se declare en el nivel superior en el método Render, antes de cualquier posible declaración if (u otra declaración de alcance).

Actualización 2: deshacerse de este error sin perder otros errores de IntelliSense

Haga clic en el botón de filtro en la esquina superior izquierda del panel de la lista de errores y desmarque la casilla CS0103 cuál es el código de error para: El nombre ‘__o’ no existe en el contexto actual y estos errores ya no se mostrarán y aún puede tener otros errores y advertencias de IntelliSense:

ingrese la descripción de la imagen aquí

Después de leer los enlaces proporcionados en los comentarios anteriores, resulta ser cómo intellisense maneja los bloqueos.

Mikhail Arkhipov publicó una explicación y una solución en los foros de ASP.NET:

Finalmente obtuvimos una reproducción confiable e identificamos el problema subyacente. Una reproducción trivial se ve así:

<% if (true)  %>
    <%=1%>
<%  %>
<%=2%>

Para proporcionar intellisense en <%= %> bloques en tiempo de diseño, ASP.NET genera asignación a un temporal __o la variable y el lenguaje (VB o C#) luego proporcione el sentido inteligente para la variable. Eso se hace cuando el compilador de la página ve la primera <%= ... %> cuadra. Pero aquí, el bloque está dentro del ifasí que después de la if se cierra, la variable queda fuera del alcance. Terminamos generando algo como esto:

if (true)  
    object @__o;
    @__o = 1;

@__o = 2;

La solución consiste en agregar una expresión ficticia al principio de la página. P.ej <%="" %>. Esto no renderizará nada, y se asegurará de que __o se declara de nivel superior en el método Render, antes de cualquier potencial if (u otra declaración de alcance).

Notando arriba, la respuesta de Failure en realidad no hace mucho daño, aparte de ocultar todos los errores de intellisense, que se conocerían de todos modos en el momento de la compilación.

Referencia: http://youku.io/questions/324366/asp-net-mvc-error-name-o-is-not-declared https://msdn.microsoft.com/en-us/library/t8zbaa6f.aspx

<% response.write(var) %> en vez de <% =var %> elimina el error sin declarar __o como se sugiere en otras publicaciones

http://foros.asp.net/p/923745/1266105.aspx

Si para ti ha resultado de ayuda este post, sería de mucha ayuda si lo compartes con otros seniors de este modo contrubuyes a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *