¿Cómo puedo hacer < form method = & # 8220; get & # 8221; > en ASP.Net para un formulario de búsqueda?

StackOverflow https://stackoverflow.com/questions/319413

  •  11-07-2019
  •  | 
  •  

Pregunta

Tengo un formulario de búsqueda en una aplicación que estoy desarrollando actualmente, y me gustaría que sea el equivalente de method = " GET " .

Por lo tanto, al hacer clic en el botón de búsqueda, el usuario accede a search.aspx?q=the+query+he+entered

La razón por la que quiero esto es simplemente URLs marcables, además se siente más limpio hacerlo de esta manera.

Tampoco quiero que el valor del campo oculto viewstate se agregue a la URL tampoco.

Lo mejor que se me ocurrió para esto es:

  1. Capture el evento de clic del lado del servidor del botón y Response.Redirect .
  2. Adjunte un controlador JavaScript onclick al botón que activa un window.location.replace .

Ambos se sienten extravagantes y subóptimos ... ¿Puedes pensar en un mejor enfoque?

¿Fue útil?

Solución

Use un formulario html antiguo y simple, no un formulario del lado del servidor (runat = server), y de hecho debería poder hacerlo funcionar.

Sin embargo, esto podría ser un problema si tiene una página maestra visual de estudio lista para usar que envuelve toda la página en un formulario del lado del servidor, porque no puede anidar formularios.

Los formularios web no tienen que apestar, pero las implementaciones predeterminadas a menudo sí. No tiene que usar formularios web para todo. A veces, el código de solicitud antiguo de post / get y proceso funcionará bien.

Otros consejos

Trabajé en un sitio web que tenía que publicar en un sitio de terceros para hacer la búsqueda en el sitio web del cliente. Terminé haciendo una Response.Redirect simple y pasé los parámetros de búsqueda a través de la cadena de consulta de esta manera:

protected void Button1_Click(object sender, EventArgs e)
{
    string SearchQueryStringParameters = @"?SearchParameters=";
    string SearchURL = "Search.aspx" + SearchQueryStringParameters;

    Response.Redirect(SearchURL);
}

Y en su página Search.aspx en su carga de página ...

protected void Page_Load(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(Request.QueryString["SearchParameters"]))
    {
        // prefill your search textbox
        this.txtSearch.Text = Request.QueryString["SearchParameters"];

        // run your code that does a search and fill your repeater/datagrid/whatever here
    }
    else
    {
        // do nothing but show the search page
    }
}

Espero que esto ayude.

Esta función permite enviar una página utilizando el método GET.

Para enviar una página utilizando el método get, debe:

  1. agregue este código Form.Method = " get " ;; en el método Page_Load
  2. Use este código < asp: Botón runat = " servidor " ID = " btnGenerate " / > como botón de envío
  3. agregue el atributo rel = " do-not-submit " a todos los elementos del formulario que no desea incluir en su cadena de consulta
  4. cambie la lógica de código subyacente de su página usando Request.QueryString
  5. deshabilite el estado de vista de la página con EnableViewState = " false " (a menos que se use para otros fines)

Código

$(document).ready(function(){ enableSubmitFormByGet(); });

function enableSubmitFormByGet(){
   if($("form").attr("method") == "get"){
        $("form").submit(function() {
            $("[name^=" + "ctl00" + "]").each(function(i){
            var myName = $(this).attr("name");
            var newName = "p" + (i-1);
            $(this).attr("name", newName);
        });
     var qs =$(this).find("input[rel!='do-not-submit'],textarea[rel!='do-not-submit'],select[rel!='do-not-submit'],hidden[rel!='do-not-submit']").not("#__VIEWSTATE,#__EVENTVALIDATION,#__EVENTTARGET,#__EVENTARGUMENT").serialize();
     window.document.location.href = "?" + qs;
     return false;
});

Haría (b) ya que (a) requeriría dos viajes de ida y vuelta para una sola consulta. Alternativamente, puede deshabilitar viewstate en la página, eliminar cualquier otro campo oculto a través de javascript y también usar javascript para modificar el método de formulario de la publicación para obtener. Nunca he hecho esto de verdad, pero mi página de juguetes con la muestra incluida funcionó de maravilla. Podría decirse que es más fácil que codificar la cadena de búsqueda y realizar la obtención a través de JavaScript.

En realidad, parece que sería más feliz con ASP.NET MVC, ya que esto se puede hacer fácilmente simplemente configurando el método de formulario para OBTENER en la vista.

código de muestra usando jquery

 $(document).ready( function() {
     $('input[type=hidden]').remove();
     $('form').attr('method','get');
 });

EDITAR: Parece que también deberías poder hacer lo mismo en el lado del servidor. Tal vez en OnPreRenderComplete. No tengo acceso a Visual Studio en este momento para verificar.

Siempre he usado Response.Redirect ya que "funciona".

No creo que haya un método óptimo.

Simplemente use esto en su evento .click antes del envío del formulario:

    $("#__VIEWSTATE").remove();
    $("#__EVENTVALIDATION").remove();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top