Frage

Ich habe ein Suchformular in einer App Ich bin zur Zeit der Entwicklung, und ich möchte es das Äquivalent von method="GET" sein.

Wenn also die Suchtaste klicken, geht der Benutzer search.aspx?q=the+query+he+entered

Der Grund, warum ich dies will, ist einfach ein Lesezeichen URLs, plus es fühlt sich sauberer es auf diese Art und Weise zu tun.

Ich mag auch nicht den Ansichtszustand versteckten Feld Wert entweder an die URL angehängt.

Das Beste, was ich tun kann, dafür ist:

  1. Nehmen Sie das serverseitige Klick-Ereignis der Schaltfläche und Response.Redirect.
  2. Schließen Sie einen Javascript onclick Handler auf die Schaltfläche, die eine window.location.replace abfeuert.

Beide fühlen schrullige und suboptimale ... Können Sie sich einen besseren Ansatz denken?

War es hilfreich?

Lösung

Verwenden Sie ein einfaches altes HTML-Formular, nicht eine serverseitige Form (runat = Server), und Sie sollen tatsächlich in der Lage sein, damit es funktioniert.

Dies könnte jedoch ein Problem, wenn Sie eine aus der Box Visual Studio Masterseite, die die gesamte Seite in einem serverseitigen Formular Wraps, weil Sie können nicht verschachtelt Formen.

Web-Formulare müssen nicht saugen, aber die Standardimplementierungen oft tun. Sie müssen nicht Web-Formulare für alles verwenden. Manchmal plain old post / bekommen und Prozessanforderungscode wird gut tun.

Andere Tipps

arbeitete ich auf einer Website, die auf eine 3rd-Party-Website zu veröffentlichen hatte die Suche zu tun auf der Website des Kunden. Ich landete ein einfaches Response.Redirect zu tun und in der Suchparameter durch die Query-String übergeben wie folgt:

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

    Response.Redirect(SearchURL);
}

Und auf Search.aspx Seite in Ihrem Pageload ...

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
    }
}

Hope, das hilft.

Diese Funktion erlaubt eine Seite mit der GET-Methode zu senden.

Um eine Seite mit der get-Methode einreichen müssen Sie:

  1. fügen Sie diesen Code Form vorliegt.Verfahren = "get"; in der Page_Load-Methode
  2. Verwenden Sie diesen Code als Submit-Button
  3. in rel = "do-not-Eintragen" Attribut für alle Formularelemente, die Sie wollen nicht in der Abfrage-String enthalten
  4. ändern, um die Code-Behind-Logik Ihrer Seite mit Request.QueryString
  5. Deaktivieren Sie die Seite Ansichtszustand mit EnableViewState = "false" (es sei denn, es für andere Zwecke verwendet wird)

Code

$(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;
});

ich tun würde, (b), da (a) zwei Umläufe für eine einzelne Abfrage erfordern würde. Alternativ können Sie Ansichtszustand auf der Seite, entfernen Sie alle anderen ausgeblendeten Felder über JavaScript aktivieren, deaktivieren und auch Javascript, verwenden Sie das Formular Methode von Post zu ändern, zu erhalten. Ich habe noch nie das richtig gemacht, aber mein Spielzeug Seite die mitgelieferten Beispiel arbeitete wie ein Zauber verwenden. Es ist wohl einfacher als kodieren die Suchkette und macht die get über Javascript.

Eigentlich ist es klingt wie Sie glücklicher mit ASP.NET MVC wären, da dies es leicht machbar ist, indem Sie einfach das Formular Methode Einstellung in der Ansicht zu erhalten.

Beispielcode mit Jquery

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

EDIT: Es scheint so, sollten Sie die gleiche Sache serverseitige Lage sein, zu tun, auch. Vielleicht in OnPreRenderComplete. jetzt keinen Zugriff auf Visual Studio hat zu überprüfen.

Ich habe immer Response.Redirect wie es "funktioniert" verwendet wird.

Ich glaube nicht, gibt es eine optimale Methode.

Verwenden Sie einfach diese in Ihrem .click Ereignisse vor dem Formulareinreichung:

    $("#__VIEWSTATE").remove();
    $("#__EVENTVALIDATION").remove();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top