asp.net mvc 3 rc1. ModelBinder заполняет все свойства нулем
У меня есть такой объект
public class ParentEntityInfo
{
public long? ParentId { get; set; }
public string EntityName { get; set; }
public string ParentProperty { get; set; }
}
и вид для этого объекта:
<%=Html.Hidden("parentInfo.ParentId", parentInfo.ParentId)%>
<%=Html.Hidden("parentInfo.ParentProperty", parentInfo.ParentProperty)%>
<%=Html.Hidden("parentInfo.EntityName", parentInfo.EntityName)%>
У меня есть случай, когда parentInfo имеет значение null, и я отправляю эту форму на контроллер. На действие контроллера
public ActionResult SomeAction(..., ParentEntityInfo parentInfo)
Я получаю построенный объект parentInfo, но все свойства имеют значение null. В этом случае я бы предпочел, чтобы весь parentInfo был нулевым. У меня есть какая-то возможность сказать, что по умолчанию модель связующего не пропускает такой объект? Или, возможно, я могу изменить что-то в этом коде, чтобы заставить его работать таким образом. Я думаю, что в MVC 2.0 это работало так.
2 ответа
Я думаю, что связыватель модели по умолчанию всегда будет использовать Activator.CreateInstance для привязки сложных параметров действия. Что вы можете сделать, это использовать ModelState.IsValid, чтобы оценить, был ли параметр привязан успешно. Я думаю, что в вашем случае это будет ложным по умолчанию, но если нет, вы можете добавить необходимый атрибут для обеспечения такого поведения, например
public class ParentEntityInfo
{
[Required(ErrorMessage = "Parent required")]
public long? ParentId { get; set; }
public string EntityName { get; set; }
public string ParentProperty { get; set; }
}