Pregunta

Viniendo de un fondo PHP, me encanta usar URLs limpias para obtener datos de un servicio a otro.

Sin embargo, en algunos de mis proyectos ASP.NET obtengo el horrible parámetro ViewState en mis URL.

¿Hay alguna manera de desactivar esto globalmente?

¿Qué efecto tendrá esto en mi aplicación ASP.NET?

¿Fue útil?

Solución

Puede desactivar viewstate para todo el sitio de esta manera:

    <system.web>
<pages enableViewState="false" />

Dicho esto, no deberías tenerlo en la url. ViewState es un campo oculto que se envía al servidor con una devolución de datos (que normalmente utiliza la publicación). Mantiene el estado de los controles cuando la página se presentó al cliente, enviándola con cada devolución de datos. Si funciona para la aplicación, podría cambiar para usar post en su lugar (el formulario del problema seguramente está usando get), si no, eche un vistazo a la respuesta de Jon.

Consulte este enlace para obtener más información sobre cómo encaja el estado de vista en el ciclo de vida de asp.net: http://msdn.microsoft.com/en-us/library/ms972976.aspx .

Otros consejos

Tuve una pregunta similar al escribir el Reputation Tracker .

No sé cómo lo hace globalmente, aparte de no usar nunca un formulario con runat="server" conjunto, que tiene más que ver con la disciplina que con un entorno. En particular, si tiene <=> configurado en un formulario, creo que siempre obtendrá un parámetro viewstate, incluso si lo ha desactivado en todas partes para que no obtenga ningún valor . Esa fue mi experiencia, de todos modos.

Obviamente, esto lo limita un poco, pero descubrí que usar los controles del servidor HTML (en lugar de los controles ASP.NET) para las partes apropiadas de ASP.NET puede hacer que la vida sea mucho más simple de entender.

Desactive ViewState de forma predeterminada utilizando un elemento <page> en web.config. Usar EnableViewState="true" en la directiva @Page ya no funcionará una vez que deshabilite ViewState en web.config. Si luego decide que necesita ViewState para una página específica, puede volver a activarla solo para esa página utilizando un elemento <location>.

<configuration>
  <system.web>
    <pages enableViewState="false" />
  </system.web>

  <location path="MyFolder/MyPage.aspx">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
  <location path="Site.master">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
</configuration>

Debe hacer lo mismo para cualquier página maestra que use su página habilitada para ViewState.

Agregue esto al archivo web.config:

<Pages enableViewState="false"/> 

Puede cambiar a ASP.Net MVC. Por lo que entiendo, no usa ViewState.

Recuerde, sin embargo, que ciertos comportamientos esperados por la mayoría de los desarrolladores de formularios web ASP.NET no funcionarán sin ViewState. El propósito de ViewState es proporcionar la ilusión de que varias páginas y propiedades de control persisten de una solicitud a la siguiente. ViewState no contiene todas las propiedades de control, solo aquellas que han cambiado. La idea es que ViewState conserve estas propiedades tal como estaban en el momento en que se renderizó el formulario por última vez.

Un buen ejemplo es un evento SelectedIndexChanged en un menú desplegable (uno que no tiene configurado el retroceso automático). Esto funciona porque ViewState retiene el índice anterior, y el formulario publica el índice actual, y el control compara los dos para saber que el índice seleccionado ha cambiado. Ahí es cuando se genera el evento TextChanged. Sin ViewState, ese evento no se activará. Lo mismo para <=> eventos, etc.

En ausencia de la situación GET (con la que nunca me he encontrado), el gran problema con ViewState es usarlo donde no es necesario. Su control de cuadrícula no necesita retener los valores anteriores de todos los controles en todas sus filas, así que no habilite ViewState en él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top