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; }
}

Использовать HiddenFor(...) помощник вместо.

Другие вопросы по тегам