2009-05-06 22 views
7

Me interesa saber qué significa específicamente Page.IsPostBack. Soy plenamente consciente de su uso diario en una página ASP.NET estándar, que indica que el usuario está enviando datos al servidor. Ver Page:IsPostBack Property¿Qué significa realmente IsPostBack?

Pero teniendo en cuenta este código HTML

<html> 
    <body> 
     <form method="post" action="default.aspx"> 
     <input type="submit" value="submit" /> 
     </form> 
    </body> 
</html> 

Al hacer clic en el botón Enviar, las páginas Load método se invoca, pero el Page.IsPostBack está volviendo falsa. No quiero agregar runat=server.

¿Cómo puedo saber la diferencia entre la primera carga de las páginas y una solicitud causada por el cliente al presionar enviar?

actualización
He añadido en <input type="text" value="aa" name="ctrl" id="ctrl" /> por lo que el Request.Form tiene un elemento, y Request.HTTPMethod es POST, pero IsPostBack todavía es falsa?

Respuesta

6

Una forma de hacerlo es ampliar la clase de página ASP.NET, "anular" la propiedad IsPostBack y permitir que todas sus páginas se deriven de la página extendida.

public class MyPage : Page 
{ 
    public new bool IsPostBack 
    { 
     get 
     { 
      return 
      Request.Form.Keys.Count > 0 && 
      Request.RequestType.Equals("POST", StringComparison.OrdinalIgnoreCase); 
     } 
    } 
} 
+0

+1 Esta es probablemente la solución a mi problema. Gracias –

+3

que en realidad sería más adecuado para una propiedad llamada "IsPost". – Kris

+0

Editado para incluir "Request.Form.Keys.Count" Puedo buscar el valor del cuadro de texto usando Request.Form ["ctrl"] –

1

En el ejemplo que incluye en su pregunta, no existe un estado de vista involucrado; no hay forma de que el servidor vincule esta solicitud a una solicitud anterior de la página y las trate como una unidad. La solicitud que hace clic en el botón se verá como cualquier otra solicitud aleatoria que ingrese al servidor.

0

Puede verificar los encabezados para ver si los controles de entrada están devolviendo un valor (usando Request.Forms como tvanfosson señala). Sin embargo, la gran pregunta es por qué querría no querer agregar runat = server. Todo el edificio de procesamiento de página implementado por ASP.NET (excepto MVC) depende del procesamiento del resultado de la página a través del servidor para configurar el código del lado del cliente apropiado para devoluciones de llamadas, etc.

12

Compruebe la colección Request.Form para ver si no está vacío Solo un POST tendrá datos en la colección Request.Form. Por supuesto, si no hay datos de formulario, la solicitud no se puede distinguir de un GET.

En cuanto a la pregunta en su título, IsPostBack se establece en verdadero cuando la solicitud es una POST desde un control de formulario del lado del servidor. Haciendo su forma del lado del cliente solamente, derrota esto.

+0

+1 de mi parte. Me estaba quedando un poco atrás recordando que Request.Forms era donde se podían extraer los datos del formulario de entrada en bruto. Esta es la respuesta correcta. Sigo teniendo curiosidad, sin embargo, por qué Ian no está configurando el manejo de la página. –

+0

@Mark - Im siendo "hardcore" y haciendo todo yo mismo.No pregunte por qué :-) –

+0

+1 @tvanfosson - Marqué la otra pregunta como respuesta, porque también puedo incluir "Request.Form.Keys.Count> 0" –

1

En general, una se podía ver una devolución de datos como una combinación de:

  1. método de petición HTTP es igual a "POST"
  2. HTTP HTTP_REFERER cabecera es igual a la URL actual

Eso no es 100% a prueba de tontos sin embargo, no tiene en cuenta ningún estado de ningún tipo (que probablemente desee aunque no lo sepa) pero es un puesto, atrás a la página actual .

Cuestiones relacionadas