MVC 3 – Html.EditorFor sembra memorizzare i vecchi valori dopo la chiamata $ .ajax

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:

Risposta memorizzata nella cache ...

[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??!

MODIFICARE:

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.