sto usando modello personalizzato legante in ASP.NET MVC 2 che assomiglia a questo:Impostazione dei valori ModelState nel modello personalizzato raccoglitore
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext == null)
{
throw new ArgumentNullException("controllerContext");
}
if (bindingContext == null)
{
throw new ArgumentNullException("bindingContext");
}
BaseContentObject obj = (BaseContentObject)base.BindModel(controllerContext, bindingContext);
if(string.IsNullOrWhiteSpace(obj.Slug))
{
// creating new object
obj.Created = obj.Modified = DateTime.Now;
obj.ModifiedBy = obj.CreatedBy = controllerContext.HttpContext.User.Identity.Name;
// slug is not provided thru UI, derivate it from Title; property setter removes chars that are not allowed
obj.Slug = obj.Title;
ModelStateDictionary modelStateDictionary = bindingContext.ModelState;
modelStateDictionary.SetModelValue("Slug", new ValueProviderResult(obj.Slug, obj.Slug, null));
...
Quando torno da questo legante in azione di controllo, il mio oggetto di business che è fornito come parametro per l'azione è correttamente alterato (le linee obj.Created = .... lavoro).
Tuttavia, ModelState non viene aggiornato. Lo so perché ho Richiesto sulla proprietà Slug dell'oggetto commerciale e sebbene abbia modificato ModelStateDictionary nel mio modello personalizzato, fornendo un Slug (come si può vedere sopra), ModelState.IsValid è ancora falso.
Se metto ModelState ["Slug"] nella mia finestra di controllo nella sessione di debug, dice che ha errori (1), quindi apparentemente è vuoto e in quanto tale non funziona.
Come è possibile modificare correttamente ModelState all'interno del codice del raccoglitore modello personalizzato?
La soluzione deve essere appiccicoso a StackOverflow. Ho cercato e sperimentato alti e bassi fino a quando ho trovato questo tuo. Ti garantisco, non molte persone sanno di questo trucco. Hai salvato i miei giorni! Grazie! – Stack0verflow
Ho provato la soluzione, e ha funzionato in qualche modo per la mia situazione. Puoi dare un'occhiata alla mia domanda su http://stackoverflow.com/questions/23145780/asp-net-mvc-4-how-to-validate-my-model-in-a-custom-model-binder? Grazie! – Stack0verflow