asp.net/ajax controllo basato su modelli personalizzati, visualizzare / nascondere gli elementi con segnaposto

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

Domanda

Ho un controllo basato su modelli personalizzato (barra degli strumenti) che contiene un UserControl personalizzato (tasto) Il tasto utilizza jQuery per lo stile e la gestione del Uniti / postback / non = postback etc.

Alcuni dei tasti sono nascosti con un segnaposto e vengono visualizzati quando colpisce uno dei tasti.

Tutti i pulsanti per quanto riguarda jquery sembrano essere avviato il postback (stile Ajax all'interno di un UpdatePanel utilizzando la PageRequestManager) ma il ViewState è perso sui pulsanti reso invisibile dal segnaposto.

Sembra essere un problema è specifico per il ViewState e pulsanti sul segnaposto nel controllo basato su modelli. Questo funziona normalmente in un ambiente non-ajax, ho il sospetto che mi manca qualcosa.

Qualsiasi commento che farmi pensare apprezzato.

Il codice si trova in varie parti e probabilmente non vale la pena incollare dal momento che sarà completamente scollegato (so che questo non aiuta)

È stato utile?

Soluzione

Mi sento che ho bisogno di rispondere alla mia domanda qui:

Invece di usare segnaposto o div con i CSS, UpdatePanels sono resi sia in un div o di un arco a seconda dell'opzione di rendering. In questo caso solo nascondere il div o luce che l'UpdatePanel crea piuttosto che cercare di nascondere / mostrare un nuovo contenitore esterno.

Altri suggerimenti

Se non ricordo male, controlli ASP.NET non terminare il loro ciclo di vita se hanno impostato visibile su false. Significato, le cose come render () non sono chiamati, e ViewState deve essere una di quelle cose (che ha un senso). Utilizzando pannelli aggiornamento con AJAX / JavaScript è anche una cosa davvero difficile, e non funziona molto bene. Questo è solo come ASP.NET controlli e del pannello di aggiornamento.

Il mio suggerimento è pannelli a uno usate update, o utilizzare javascript, e non entrambi.

Si può facilmente emulare ciò pannelli aggiornamento fare utilizzando jQuery $ .post / get e sostituzione di una sezione di codice con il codice html restituito da una chiamata di servizio Web.

function myButtonClick(event){
    $.post("path/to/webservice", {data1: "data1"}, function(data, status){
        $("#myPanel").replaceWith(data);
    });
}

Vi troverete infine incorrere in altri problemi anche se si dispone di un JS attaccato al codice che viene aggiornato tramite un pannello di aggiornamento. Es: Se si dispone di un elenco di elementi che ogni hanno JS ad essi connessi, come ad esempio uno dei controlli ASP.NET AJAX Control Toolkit, e si elimina uno di questi dalla pagina utilizzando un pannello di aggiornamento, il JS utilizzato per agganciare la controlla fino sarà fuori sincronia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top