我是MVC 5和EF6的新手,需要帮助。
我有两个类和一个单一的View,我可以获取类Person的值,但类Address始终为null。
我尝试在PersonController / Create
中使用构造函数和Bind我的课程:
public partial class Person
{
[Key]
public int PersonID { get; set; }
[Required]
[StringLength(40)]
public string Name { get; set; }
[StringLength(40)]
public string Email { get; set; }
public virtual Address AddressDI { get; set; }
}
public class Address
{
[Key]
public int AddressID { get; set; }
[Required]
public string City { get; set; }
[Required]
public string Street { get; set; }
[Required]
public virtual Person PersonDI { get; set; }
}
控制器
public class ContatoController : Controller
{
private readonly Address _address;
public PersonController()
{
_address = new Address();
}
HttpPost]
ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = @"Name,Email,AddressID,City,")] Person person, Address address)
{
if (ModelState.IsValid)
{
db.Person.Add(person);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(person);
}
/* Other Actions and stuffs */
}
这是我3天的痛苦:(
答案 0 :(得分:0)
我不知道你在这里想要达到的目的是什么。如果您想发布一个人类,那么只需发布此人:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Person person)
{
if (ModelState.IsValid)
{
db.Person.Add(person);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(person);
}
在视图中,类似于:
@model Partner
@Html.BeginForm("Create","Contato", FormMethod.Post){
@Html.TextboxFor(p => Model.AddressDI.City)
}
通常的做法是在称为viewModels的包装类中跨控制器操作发送数据。 ViewModels通常包含视图中给定时刻需要发布或显示的所有内容,以及视图的潜在参数。
类似的东西:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ContatoViewModel viewModel)
{
var person = new Person();
person.Name = viewModel.Name;
person.Email = viewModel.Email;
person.AddressDI = viewModel.AddressDI
if (ModelState.IsValid)
{
db.Person.Add(person);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(viewModel);
}
说实话,如果没有看到你在视图中所做的事情,我就不能多说。
有关MVVM模式的更多信息:https://msdn.microsoft.com/en-us/library/hh848246.aspx
有一些工具可供选择,例如Jimmy Bogard的AutoMapper,它有助于在视图模型和类之间复制值。