Postback con modifica della Stringa di Query dal menu a Discesa ASP.NET

Mio asp.net pagina di rendering diversi controlli basati sul quale segnalare un utente ha selezionato, ad esempio, alcune relazioni richiedono 5 a tendina, alcune caselle di controllo e 6 menu a discesa).

Si può selezionare un report utilizzando due metodi. Con SelectedReport=MyReport nella stringa di query, o selezionandolo da un elenco a discesa. Ed è un caso comune per loro di venire alla pagina con SelectedReport nella stringa di query, e quindi modificare il report selezionato nel menu a discesa.

La mia domanda è, c’è comunque di fare del menu a discesa per modificare la stringa di query quando è selezionato. Così vorrei SelectedReport=MyNewReport nella stringa di query e la pagina di post indietro.

Al momento è solo facendo una normale postback, che lascia il SelectedReport=MyReport nella stringa di query, anche se non è il report selezionato.

Edit: E ho anche la necessità di preservare il ViewState.

Ho provato a fare Server.Transfer(Request.Path + "?SelectedReport=" + SelectedReport, true) nel gestore eventi per la Discesa, e questo funziona funzione di saggio, purtroppo, perché si tratta di un Server.Trasferimento (per preservare la ViewState) invece di una Risposta.Reindirizzare l’URL in ritardo rispetto a ciò che viene mostrato.

Forse sto chiedendo l’impossibile o andando su di esso completamente il modo sbagliato.

@Craig raccolta QueryString è di sola lettura e non può essere modificato.
@Jason Che sarebbe fantastico, ma mi piacerebbe perdere il ViewState non dovrei? (Scusate ho aggiunto che dopo aver visto la tua risposta).

InformationsquelleAutor Ray | 2008-08-25

 

6 Replies
  1. 3

    È necessario disattivare la autopostback a discesa – quindi, è necessario collegare il codice javascript che assumerà il ruolo – in e il codice del gestore eventi per l’evento onchange per la discesa, si verrebbe a creare un URL sul valore selezionato dall’elenco a discesa e utilizzare javascript per chiedere che pagina.

    EDIT: Qui è un po ‘ veloce e sporco codice che è indicativo di quello che sarebbe fare il trucco:

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

    Ovviamente, si avrebbe bisogno di fare un po ‘ di più, ma questo non funziona e che potrebbe darti quello che sembra che si sta dopo. Mi consiglia di utilizzare un JavaScript toolkit (io uso MochiKit, ma non è per tutti) per ottenere alcune delle duro lavoro fatto uso unobtrusive JavaScript tecniche, se possibile (a differenza di quello che uso io in questo esempio).

    @Ray: Si utilizza ViewState?! Mi dispiace tanto. 😛 Perché, in questo caso, non è necessario conservare. dire pregare?

  2. 0

    Se si tratta di un sistema automatico di post, quando i dati cambiano, allora si dovrebbe essere in grado di reindirizzare la nuova stringa di query con un lato server del gestore della casella di riepilogo a discesa di “onchange’ evento. Se si tratta di un pulsante, maniglia lato server nell’evento click. Mi piacerebbe postare un esempio di cosa sto parlando, ma sto uscendo per andare a prendere i bambini.

  3. 0

    Hai provato a modificare la Richiesta.QueryString[] sul SelectedIndexChanged per la Discesa? Che dovrebbe fare il trucco.

  4. 0

    Si potrebbe compilare un elenco a discesa basato sulla querystring non postback, quindi utilizzare sempre il valore dal menu a discesa. In quel modo l’utente visita la pagina sarà basato sulla querystring e successive modifiche si fanno a discesa cambia il rapporto selezionato.

  5. 0

    Lo stato di visualizzazione dura solo per più richieste per la stessa pagina. Cambiando la stringa di query nell’URL è la richiesta di una nuova pagina, eliminando così lo stato di visualizzazione.

    È possibile rimuovere la dipendenza sullo stato di visualizzazione per l’aggiunta di ulteriori parametri della stringa di query? È quindi possibile costruire un nuovo URL e Risposta.Redirect ad esso.

    Un’altra opzione è quella di utilizzare il Proprietà azione sul modulo per cancellare la stringa di query così almeno la stringa di query non è in contraddizione con ciò che è visualizzato sulla pagina dopo pagina, l’utente seleziona un diverso rapporto.

    Form.Action = Request.Path;
  6. 0

    È possibile utilizzare la funzione riportata di seguito per modificare la querystring postback in asp.net utilizzando il Webresource.axd script come di seguito.

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

Lascia un commento