Pregunta

Cuando veo el código fuente en mi página ASP.NET, aparece el siguiente fragmento:

<script type="text/javascript"> 
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script> 

<script src="/WebResource.axd?d=5lheyan7fritNTjDRpG8vA2&amp;t=633734967316503584" type="text/javascript"></script> 

el archivo .aspx se parece a esto:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="NaturalDateDemo._Default" %>

<form id="form1" runat="server" enableviewstate="False">
   Enter something to parse:<br />
   <asp:TextBox ID="TextBox1" runat="server" Width="270px"></asp:TextBox>
   <asp:Button ID="Button1" runat="server" Text="Parse" PostBackUrl="Default.aspx" CausesValidation="False" EnableViewState="False" UseSubmitBehavior="true" />
</form>

Ambos fragmentos de código (el código literal y el material en /WebResource.axd) parecen estar relacionados con hacer javascript devoluciones de datos basadas y no se me ocurre ninguna razón por la que mi página requiera javascript para hacer las devoluciones de datos.

  • ¿Qué está haciendo esto?
  • ¿De dónde viene?
  • Poder ¿Me deshago de él?
  • Cómo ¿Puedo deshacerme de él?

La página de donde proviene esta pregunta


Un pequeño trabajo de Google encontrado este Indicando que controles de validación causaría esto, pero no creo que tenga ningún control de validación.

Mirando a la WebResource.axd El archivo en detalle muestra mucho de lo que parece ser una función de placa repetitiva a la que no puedo encontrar ninguna referencia en ningún lado.


Después de una investigación más profunda, parece que mi botón de enviar no funciona como pensaba porque tiene algo de JavaScript en su onclick manipulador.Sin embargo, al usar FireBug puedo ver que la página se está actualizando por completo (la respuesta HTTP tiene el texto completo de la página), así que no tengo idea de qué se trata.OTOH ahora estoy viendo un __EVENTVALIDATION argumento que no debería estar allí (porque no hay nada que validar), por lo que podría ser interesante buscarlo.


Según la respuesta a continuación, parece que lo que me encuentro es que la forma predeterminada (¿única?) para que ASP.NET realice una devolución es a través de JavaScript, incluso cuando un formulario HTML básico funcionaría bien.(Personalmente, creo que esta es una elección de diseño estúpida por parte de MS;ASP.NET no debería introducir la dependencia de JavaScript hasta que le pida que haga algo que no se puede hacer sin él).

Basándose en esa opinión, varias personas han especulado que no sé de qué estoy hablando.(Admito que confundí el problema al no usar el término "devolución de datos", pensando que solo implica cosas basadas en JS). Si bien no conozco los detalles de implementación de ASP.NET, sí sé cómo funciona el protocolo HTTP general. Las cosas POST funcionan y mi opinión se basa en considerar cómo implementaría la solución yo mismo y no solo en cómo me gustaría que funcionara.

¿Fue útil?

Solución

La respuesta es mucho más simple que cualquiera que he visto aquí:. Acaba de quitar el PostBackUrl del Button y todo JavaScript desaparece como magia

Sin JavaScript, un botón HTML no puede someterse a otra página que la página especificada en <form action="...">. Sin embargo, ASP.NET proporciona una posibilidad de hacerlo fuera de la caja si se especifica un PostBackUrl en un Button. Eso es lo que el código JavaScript se trata de: el apoyo a un post-back no predeterminada.

En este caso específico el PostBackUrl es lo mismo que <form> del action, pero al parecer no lo hace especial ASP.NET de los casos esto y cualquier cadena no vacía desencadena este guión envoltorio.

Otros consejos

4 cosas a comprobar:

  1. ¿Está utilizando un UpdatePanel lugar de la página?
  2. ¿Tiene usted alguna Javascript a hacer llamadas a métodos web en su código detrás?
  3. ¿La página principal tiene nada en ella que podrían añadir a su salida?
  4. ¿Usted está refiriendo a cualquier control de una biblioteca externa?

Una vez que haya investigado eso, usted podría ser capaz de, al menos, cortar algunas opciones en cuanto a la fuente del problema.

¿Puede dar ninguna muestra del código en su ASPX?

EDIT: Tu entrada incluye ahora un enlace a la página de origen. La página tiene un botón de devolución de datos en el formulario, lo que hace que los resultados de análisis sin tener que hacer una devolución de datos completa (notar que toda la pantalla no vuelve a cargar). La URL WebResource en su ruta contiene las funciones Javascript empleado para lograr esto. Su código está haciendo una devolución de datos parciales, por lo que usted tiene el código relacionado con la devolución de datos, en su página.

editar # 2: Para eliminar completamente las devoluciones de datos del sistema, se tendrá que quitar el envío del formulario .NET actualmente está utilizando en su aplicación. Su botón es la publicación de la espalda, por lo tanto necesita código para realizar esta devolución de datos al servidor. Si desea eliminar esta, que tiene que hacer las cosas con el HTML de la vieja escuela publicar directamente a otra URL. Usted necesitará un formulario de envío estándar con una URL de acción y formar campos de entrada. Sin embargo, en ese momento, que son una especie de derrotar el propósito de utilizar .NET y su soporte devolución de datos. Supongo que la pregunta final es ¿por qué necesita eliminar esta javascript?

Así es como funcionan las devoluciones de datos .NET, y por qué muchas personas se están moviendo el modelo .NET MVC. A fin de que las devoluciones de datos para que funcione correctamente, .NET en realidad se basa en javascript para hacer mucho del trabajo sucio. La única forma en que realmente puede deshacerse de él es ir con el modelo MVC.

Si buscas en su página, no entiendo cómo se "no se puede pensar en ninguna razón por la que [su] página requeriría post-espaldas." Es bastante claro que cuando se hace clic en el botón Analizar la que está llamando algunos métodos en el servidor para interpretar el pasado en valor y convertirlo en una fecha, a continuación, volver a esa fecha al navegador para que el usuario pueda verlo.

Estoy en lo cierto al suponer que originalmente no crear esta página y tienen poca experiencia con ASP.Net? No es que "MS atornilla a lo grande" (como se mencionó en su comentario en respuesta muy bien hecho de Jay S que probablemente merece una marca de verificación) es que sus requisitos parecen haber cambiado y ahora es necesario asegurarse de que la página funciona cuando JavaScript no está habilitado, lo que es posible hacer con ASP.Net, no es sólo la forma natural para ASP.Net hacer las cosas. Sin embargo, esto probablemente requerirá una revisión bastante fuerte de la página, como la mayoría de los cambios drásticos en los requisitos hacen.

Si está utilizando un control que hereda de otra clase, el tipo aprobado debe ser el tipo de padre, no la clase base

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