2008-08-25 6 views
2

Meine ASP.NET-Seite wird verschiedene Steuerelemente basierend auf dem Bericht, den ein Benutzer z. Einige Berichte erfordern 5 Dropdown-Menüs, zwei Kontrollkästchen und 6 Dropdown-Menüs.Postback mit geänderter Abfragezeichenfolge aus Dropdown in ASP.NET

Sie können einen Bericht mit zwei Methoden auswählen. Mit SelectedReport=MyReport in der Abfragezeichenfolge oder durch Auswahl aus einem Dropdown-Menü. Und es kommt häufig vor, dass sie in der Abfragezeichenfolge auf die Seite mit SelectedReport zugreifen und dann den in der Dropdownliste ausgewählten Bericht ändern.

Meine Frage ist, gibt es sowieso die Drop-Down-Änderung der Abfrage Zeichenfolge, wenn es ausgewählt ist. So würde ich SelectedReport=MyNewReport in der Abfragezeichenfolge und der Seite wünschen, zurück zu schreiben.

Im Moment macht es nur ein normales Postback, das die SelectedReport=MyReport in der Abfragezeichenfolge belässt, auch wenn es nicht der aktuell ausgewählte Bericht ist.

Bearbeiten: Und ich muss auch ViewState erhalten.

Ich habe versucht, Server.Transfer(Request.Path + "?SelectedReport=" + SelectedReport, true) in der Event-Handler für das Dropdown zu tun, und dies funktioniert funktional, leider, weil es ein Server.Transfer (ViewState beibehalten) anstelle einer Response.Redirect die URLs hinter dem, was angezeigt wird.

Vielleicht frage ich das Unmögliche oder mache es komplett falsch.

@Craig Die QueryString-Auflistung ist schreibgeschützt und kann nicht geändert werden.
@Jason Das wäre toll, außer ich würde den ViewState verlieren, nicht wahr? (Entschuldigung, ich habe das hinzugefügt, nachdem ich deine Antwort gesehen habe).

Antwort

0

Wenn es sich um eine automatische Post handelt, wenn sich die Daten ändern, sollten Sie in der Lage sein, mit einem serverseitigen Handler des Dropdown-Ereignisses "onchange" zur neuen Abfragezeichenfolge umzuleiten. Wenn es sich um eine Schaltfläche handelt, behandeln Sie die Server-Seite im click-Ereignis. Ich würde eine Probe von dem, worüber ich rede, posten, aber ich bin auf dem Weg nach draußen, um die Kinder abzuholen.

1

Haben Sie versucht, Request.QueryString [] auf SelectedIndexChanged für DropDown zu ändern? Das sollte den Trick machen.

0

Sie können Ihre Dropdown-Liste basierend auf der Querystring bei Nicht-Postbacks ausfüllen und dann immer den Wert aus dem Dropdown-Menü verwenden. Auf diese Weise basiert der erste Besuch des Benutzers auf der Seite auf dem Querystring, und nachfolgende Änderungen am Dropdown ändern den ausgewählten Bericht.

3

Sie müssen Autopostback im Dropdown-Menü deaktivieren - dann müssen Sie Javascript-Code anschließen, der diese Rolle übernimmt - im Event-Handler-Code für das Onchange-Ereignis für das Dropdown würden Sie eine URL-basierte URL erstellen Klicken Sie auf den aktuell ausgewählten Wert aus dem Dropdown-Menü und verwenden Sie Javascript, um diese Seite anzufordern.

EDIT: Hier ist etwas schnell und schmutzig-Code, der angibt, ist das, was es tun würde:

<script> 
    function changeReport(dropDownList) { 
     var selectedReport = dropDownList.options[dropDownList.selectedIndex]; 
     window.location = ("scratch.htm?SelectedReport=" + selectedReport.value); 
    } 
</script> 

<select id="SelectedReport" onchange="changeReport(this)"> 
    <option value="foo">foo</option> 
    <option value="bar">bar</option> 
    <option value="baz">baz</option> 
</select> 

Offensichtlich würden Sie brauchen ein bisschen mehr zu tun, aber diese Arbeit tut und würde Ihnen, was es scheint, du bist hinterher. Ich würde empfehlen, ein JavaScript-Toolkit zu verwenden (ich benutze MochiKit, aber es ist nicht für jeden), um etwas härtere Arbeit zu erledigen - benutze unauffällige JavaScript-Techniken, wenn überhaupt möglich (im Gegensatz zu dem, was ich in diesem Beispiel verwende).

@Ray: Sie verwenden ViewState ?! Es tut mir Leid. : P Warum musst du es in diesem Fall bewahren? Bitte erzählen?

0

Der Ansichtszustand dauert nur multiple requests for the same page. Durch Ändern der Abfragezeichenfolge in der URL wird eine neue Seite angefordert, wodurch der Ansichtsstatus gelöscht wird.

Ist es möglich, die Abhängigkeit vom View-Status durch Hinzufügen weiterer Parameter für die Abfragezeichenfolge zu entfernen? Sie können dann eine neue URL und Response.Redirect erstellen. Eine andere Option ist die Verwendung der Action property im Formular, um die Abfragezeichenfolge zu löschen, so dass mindestens die Abfragezeichenfolge nicht widerspricht, was auf der Seite angezeigt wird, nachdem der Benutzer einen anderen Bericht ausgewählt hat.

Form.Action = Request.Path; 
0

können Sie verwenden Sie die folgende Funktion, um die Abfragezeichenfolgen auf Postbacks in asp.net mit dem WebResource.axd Skript wie unten zu ändern.

var url = updateQueryStringParameter(window.location.href, 
            'Search', 
            document.getElementById('txtSearch').value); 
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("searchbutton", "", 
            true, "aa", url, false, true)); 
Verwandte Themen