将模型发送到控制器后,模型上的空值

时间:2014-01-29 22:17:27

标签: c# asp.net-mvc razor

我正在使用.net MVC。 我有一些像以下形式的值:

@Html.TextBoxFor(model => model.Name, new { @class = "form-control" })

在控制器上,我得到的数据如下:

 public ActionResult NovaPessoa(Person person)
    {

问题是我只能得到我放置@Html.TextBoxFor标记的值。

所有其他复杂信息(例如person.ContactInformation)在提交后都会丢失,我无法在实体框架中使用SaveChanges,因为在使用{{1}后它会给我一个无效的对象} 方法。

问题是:我是否需要对我的所有模型属性使用Atach标记,即使我当时没有使用它来显示任何内容,只是为了将它们放在Controller上?

1 个答案:

答案 0 :(得分:1)

你是对的。人们(错误)正常做的是使用HiddenFor

@Html.HiddenFor(model => model.ContactInformation)

您应该做的是将模型切割为仅具有适当属性的视图模型。

所以,使用此模型:

public class PersonVM {
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public string ContactInformation { get; set; }
}

..如果你所做的只是更新联系信息。而是为您的模型创建一个新类:

public class PersonContactInfoEditVM {
    public int PersonId { get; set; }
    public string ContactInformation { get; set; }
}

这就是你所需要的一切。如果您不向页面添加30个HiddenFor元素,这可以避免创建无效对象..导致数据非常破碎。

您可能会想“ugggghhhh,从PersonContactInfoEditVMPerson的所有手动映射......我不想写那种代码”。没人做..这就是为什么存在以下库: