asp.net mvc 3 rc1.ModelBinder заполняет все свойства нулем - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть такой объект

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 ]

0 голосов
/ 15 февраля 2011

Я думаю, что связыватель модели по умолчанию всегда будет использовать 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; }
}
0 голосов
/ 18 декабря 2010

Вместо этого используйте помощник HiddenFor(...).

...