Ho creato una vista a rasoio MVC3 fortemente tipizzata utilizzando il codice scaffolding.MVC3 Html.HiddenFor (Modello => Model.Id) non ritorno al controller
Il modello è un POCO con un tipo di base PersistentEntity
che definisce una proprietà denominata Creato, Aggiornato e Id.
Id è un int, creato e aggiornato è DateTime.
Sto usando Html.HiddenFor
per creare il campo nascosto sulla vista.
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.Created)
@Html.HiddenFor(model => model.Updated)
Nella pagina, l'input nascosto viene reso correttamente, con l'ID impostato nel valore.
<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="12">
Tuttavia quando la pagina viene sottoposto al controllo [HttpPost]Edit(Model model)
la proprietà Id è sempre 0. creati e aggiornati siano correttamente compilato con i valori della vista.
Questo dovrebbe essere 12 nel caso dell'esempio in questo post. Cosa sta andando storto?
Sono consapevole che posso cambiare la firma del metodo per [HttpPost]Edit(int personID, Person model)
come il PersonID è nella stringa di ottenere, però perché il modello non ottiene popolato con il campo nascosto?
Aggiornamento
Il problema era che il setter sul PersistentEntity
era protetta, ASP non ha potuto impostare la proprietà, e la inghiottì. Cambiare questo in pubblico ha risolto il problema.
public abstract class PersistentEntity
{
public virtual int Id { get; protected set; }
public virtual DateTime Created { get; set; }
public virtual DateTime Updated { get; set; }
}
Questo dovrebbe funzionare. Hai controllato il contructor e l'organizzatore della proprietà per l'Id nella tua classe? – Dabblernl
Funziona per me, quindi ci manca qualcosa che non è menzionato in questione: raccoglitori personalizzati, modulo JavaScript personalizzato inviato, qualcosa del genere ... – Giedrius
Come appare la classe del modello contenente la proprietà Id? –