KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am using custom model binder in ASP.NET MVC 2 that looks like this: 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)); ... When I get back from this binder into controller action, my business object that is provided as a parameter to the action is correctly altered (the lines obj.Created = .... work). However, the ModelState is not updated. I know this because I have Required on my business object's Slug property and although I altered ModelStateDictionary in my custom model binder, providing a Slug to it (as you can see above), the ModelState.IsValid is still false. If I put ModelState["Slug"] in my Watch window in Debug session, it says it has Errors (1), so apparently it is empty and as such fails. How can I correctly alter the ModelState inside the custom model binder code?
Tags (comma-separated)
Save Edits
Cancel