如何从我在MVC 5中注入的类中获取值

时间:2017-11-20 20:34:30

标签: asp.net-mvc-5 entity-framework-6

我是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天的痛苦:(

1 个答案:

答案 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,它有助于在视图模型和类之间复制值。