Questo è un seguito dalla seguente domanda:
MVC 3 + $ .ajax – la risposta sembra essere l’output del caching dalla vista parziale
C’è una descrizione dettagliata del problema laggiù. Tuttavia, ora sono riuscito a restringere il problema, che sembra essere con gli helper Html.EditorFor, da qui la nuova domanda.
Il problema:
Inserisco i dati sul server utilizzando $ .ajax, quindi restituisco l’html della vista parziale che contiene i controlli di input. Il problema è che, nonostante il passaggio di un object appena creato al modello Viste parziali, i vari helper @ Html.EditorFor e @ Html.DropDownListFor restituiscono i VECCHI DATI !.
Posso provare che il modello è passato correttamente in un nuovo object agli helper, stampando il valore accanto all’helper Html. Vale a dire:
@Html.EditorFor(model => model.Transaction.TransactionDate) @Model.Transaction.TransactionDate.ToString()
Come mostra la seguente immagine, @ Html.EditorFor sta restituendo i dati errati:
[Si noti che il valore accanto alla casella di testo Comentario è una data, perché stavo testando la sostituzione dei valori predefiniti con un valore che sarebbe cambiato con ogni post, cioè un DateTime.]
Se sostituisco @ Html.EditorFor per TransactionDate con un semplice vecchio @ Html.TextBox ():
@Html.TextBox("Transaction_TransactionDate", Model.Transaction.TransactionDate)
Quindi esegue il rendering del valore TransactionDate corretto per un nuovo object Transaction, ad esempio DateTime.MinValue (01/01/0001 …).
Perciò…
Il problema è con gli helper @ Html.EditorFor. Il problema si verifica anche con TextBoxFor e DropDownListFor.
Il problema è che questi helper sembrano memorizzare il vecchio valore.
Che cosa sto facendo di sbagliato??!
Ho appena provato il debug nel modello di editor personalizzato per le date e, in questo, ViewData.TemplateInfo.FormattedModelValue mostra il valore corretto, ovvero “01/01/0001”. Tuttavia, una volta arrivato a Fiddler, la risposta mostra la vecchia data, ad esempio “01/09/2011” nell’immagine sopra.
Di conseguenza, penso solo che ci sia del caching in corso qui, ma non ne ho creato nessuno, quindi niente ha senso.