2009-04-15 8 views
6

io pongo il CurrentMode di un FormView modalità di inserimento utilizzando il metodo changemode nell'evento Page_Load in questo modo:I controlli non mantenendo i valori dopo il postback quando FormView impostato alla modalità di inserimento

if(!Page.IsPostBack) 
{ 
    MyFormView.ChangeMode(FormViewMode.Insert); 
} 

All'interno modello inserto di mio FormView I avere un controllo DropDownList con la proprietà AutoPostBack impostata su true. Ho anche diversi altri controlli DropDownList e TextBox all'interno del modello di inserimento.

Ogni volta che cambio la selezione di DropDownList e si verifica un postback, sto perdendo tutti i valori inseriti nei controlli. La cosa strana è che se utilizzo ChangeMode per impostare FormView per inserire la modalità in qualsiasi momento dopo il caricamento iniziale della pagina, non ho il problema. Ho passato il codice con il debugger e sembra che tutto stia succedendo correttamente, ma a volte dopo che il mio gestore di eventi per DropDownList ha eseguito l'esecuzione, sembra che tutto venga ripristinato.

Cosa sta succedendo qui?

Aggiornamento: Ho notato che il mio FormView era all'interno di un tag div con runat = "server" e enableviewstate = "false". Una volta abilitato viewstate per il contenitore div ho iniziato a vedere un comportamento leggermente diverso. Il FormView continua a non conservare i valori dopo il primo postback, ma ora i postback successivi funzionano correttamente e i valori vengono mantenuti.

Qualsiasi idea sarebbe molto apprezzata.

risposta

0

Prova

MyFormView.EnableViewState = true; 
+0

ViewState è abilitato per il controllo FormView. – joshb

-1

prova di selezione per cambiare a pagina Init o o eventi PreRender

+0

Provato entrambi i tuoi suggerimenti e senza fortuna. – joshb

0

I carichi ViewState prima PageLoad e la mia ipotesi è che cambiando la modalità on PageLoad ricrea un'altra serie di controlli, i quelli nel tuo EditItemTemplate. Se è impostato per impostazione predefinita su Modalità di modifica e rimuovi il commento da quella riga su PageLoad, manterrà i valori? Dovrebbe se non si cambia la modalità.

0

FormView.ChangeMode (FormViewMode.Insert)

Questo deve lavorare, controllare la ID e utilizzare intelisense?

mio esempio è con un elemento aggiuntivo vista forma ..

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    AddNewItemFormView.ChangeMode(FormViewMode.Insert) 
End Sub 

provare a farlo sul caricamento della pagina senza "if..then di", se funziona saprete che non è il espressione ma forse il contenuto o la costruzione. Ricordarsi di rendere significativi gli ID di controllo in modo che sia più facile e meno probabile che commettano errori quando è necessario utilizzarli o chiamarli tramite Intelisense.

Buona fortuna.

:)

2

Questa risposta da altri forum di Walter Wang [MSFT] - 26 Gennaio 2007 03:29 GMT

In primo luogo, il problema sembra essere che il FormView è raccontata dai dati controllo origine che i dati sono cambiati, e quindi dovrebbe rebind per ottenere i nuovi dati. Questo in realtà non dovrebbe essere stato fatto dato che siamo ancora in modalità di inserimento.Io ho una soluzione per il vostro di riferimento: Eredita da FormView per creare il proprio controllo FormView, sostituzione OnDataSourceViewChanged e impostare RequiresDataBinding false se siamo in modalità di inserimento:

public class MyFormView : FormView 
    { 
     protected override void OnDataSourceViewChanged(object sender, 
EventArgs e) 
     { 
      if (this.CurrentMode == FormViewMode.Insert) 
      { 
       this.RequiresDataBinding = false; 
      } 
      else 
      { 
       base.OnDataSourceViewChanged(sender, e); 
      } 
     } 
    } 

ho testato dalla mia parte e sembra funzionare correttamente. Per favore dagli un prova e fammi sapere il risultato.

+0

Includere il collegamento all'origine se è possibile. – JSuar

+0

Questo non ha funzionato per me –

0

Sto riscontrando il problema simile di viewstate non mantenuto nel modello EditItem. L'impostazione EnableViewState = true non aiuta neanche.

quello che faccio è ottenere la funzione OnUpdated(), e alla fine della funzione,

e.KeepInEditMode = true; 

Spero che questo aiuti ..

+1

Se hai una NUOVA domanda, per favore chiedi facendo clic sul pulsante [Chiedi domanda] (http://stackoverflow.com/questions/ask). Se hai una reputazione sufficiente, [puoi invitare] (http://stackoverflow.com/privileges/vote-up) alla domanda. In alternativa, "guarda" come preferito e riceverai una notifica di ogni nuova risposta. – Swadq

+0

KeepInEditMode fa in modo che formview rimanga in modalità di modifica dopo aver fatto clic su un pulsante con un comando di aggiornamento Non ha nulla a che fare con il mantenimento dei dati di input non ancora impegnati e nuovi http://msdn.microsoft.com/en -us/library/system.web.ui.webcontrols.formviewupdatedeventargs.keepineditmode.aspx "Per impostazione predefinita, il controllo FormView torna alla modalità specificata dalla proprietà DefaultMode dopo un'operazione di aggiornamento. Utilizzare la proprietà KeepInEditMode per specificare se il controllo FormView dovrebbe rimanere in modalità di modifica. " –

Problemi correlati