Pregunta

en nuestro sitio, hacemos reescrituras de URL para generar cantidades masivas de páginas generadas en bases de datos. En cada página, hay un control de inicio de sesión para los usuarios. de esta manera:

Página aspx interna: /DB.aspx?id=123 URL visible del usuario: /ABC/123.aspx, /ABC/456.aspx ... (url reescrito)

desafortunadamente, la etiqueta en cada página tiene un atributo de acción de " DB.aspx? id = 123 " ;. cuando el usuario hace clic en el botón, el navegador está publicando en /ABC/DB.aspx?id=123 que, por supuesto, no existe.

soluciones que probé: 1. Cambie el atributo de acción subclasificando HtmlForm. Esto destruye todas las otras formas en el sitio. 2. elimine el atributo de acción (para que el navegador siempre esté publicando en la misma url). esto funciona en las páginas reescritas pero en " / " (el default.aspx en el directorio raíz) recibo un mensaje que indica que la publicación del verbo no está permitida en " / " (iis 6 y no tengo control sobre las asignaciones)

alguien?

¿Fue útil?

Solución

Compruebe esta muy buena publicación de blog de scott gu, http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx .

" Específicamente, puede aprovechar la nueva arquitectura de extensibilidad del Adaptador de Control ASP.NET 2.0 para personalizar la representación del control, y anular su " acción " Valor de atributo con un valor que usted proporcione. Esto no requiere que cambie ningún código en sus páginas .aspx "

Consulte la sección: " Manejo de Postback de ASP.NET con Reescritura de URL " ;, He utilizado el adaptador que publicó con éxito.

Ps. tenga en cuenta que hay algunos problemas en asp.net al utilizar la reescritura de url cuando se utiliza una sesión sin cookies, y la url reescrita es más profunda que la página original, como la que tiene. (/ abc / apage vs. / db?). El problema está en el código fuente del marco, hay soluciones alternativas, pero ese es un tema completo (con concesiones :( ... es posible que desee tenerlas al mismo nivel).

Otros consejos

Semántica quizás, pero el atributo de acción = " DB.aspx? id = 123 " o " /DB.aspx? id = 123 " ;? Suponiendo que la reescritura de URL permita el paso a páginas físicas, este podría ser su problema.

Nunca lo hice, pero vi el código usando Reflector y creo que puedes arreglarlo de esta manera:

En la página:

this.Form.Action = null;

o:

this.Form.SetAttribute("action", null);

Si eso no funciona, solo establece la ruta que deseas:

this.Form.SetAttribute (" acción " ;, " ABC / 123.aspx ");

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