używam niestandardowych modelu spinacza w ASP.NET MVC 2, który wygląda tak:ustawiania wartości w ModelState zwyczaj modelu spoiwa
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));
...
Kiedy wrócę z tego spoiwa do działania kontrolera, mój obiekt biznesowy podany jako parametr akcji jest poprawnie zmieniony (linie obj.Created = .... work).
Jednak modelStateState nie jest aktualizowany. Wiem o tym, ponieważ mam wymagane dla właściwości Slug mojego obiektu biznesowego i chociaż zmieniłem ModelStateDictionary w moim segregatorze niestandardowego modelu, zapewniając Slug do niego (jak widać powyżej), ModelState.IsValid jest wciąż fałszywa.
Jeśli umieściłem ModelState ["Slug"] w moim oknie Watch w sesji Debugowania, oznacza to, że ma błędy (1), więc najwyraźniej jest puste i jako takie zawiedzie.
Jak poprawnie zmienić ModelState wewnątrz niestandardowego kodu spoiwa modelu?
Twoje rozwiązanie musi być lepki w stackoverflow. Szukałem i eksperymentowałem wysoko i nisko, dopóki nie znalazłem tego twojego. Gwarantuję, że niewiele osób wie o tej sztuczce. Uratowałeś moje dni! Dziękuję Ci! – Stack0verflow
Próbowałem twojego rozwiązania, i to działało w mojej sytuacji. Czy możesz rzucić okiem na moje pytanie na http://stackoverflow.com/questions/23145780/asp-net-mvc-4-how-to-validate-my-model-in-a- custom-modular-binder? Dziękuję Ci! – Stack0verflow