我正在使用.net MVC。 我有一些像以下形式的值:
@Html.TextBoxFor(model => model.Name, new { @class = "form-control" })
在控制器上,我得到的数据如下:
public ActionResult NovaPessoa(Person person)
{
问题是我只能得到我放置@Html.TextBoxFor
标记的值。
所有其他复杂信息(例如person.ContactInformation
)在提交后都会丢失,我无法在实体框架中使用SaveChanges
,因为在使用{{1}后它会给我一个无效的对象} 方法。
问题是:我是否需要对我的所有模型属性使用Atach
标记,即使我当时没有使用它来显示任何内容,只是为了将它们放在Controller上?
答案 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,从PersonContactInfoEditVM
到Person
的所有手动映射......我不想写那种代码”。没人做..这就是为什么存在以下库: