Asp.net mvc 5 如何从MVC5中注入的类中获取值

Asp.net mvc 5 如何从MVC5中注入的类中获取值,asp.net-mvc-5,entity-framework-6,Asp.net Mvc 5,Entity Framework 6,我是MVC5和EF6的新手,需要帮助 我有两个类和一个视图,我可以得到类Person的值,但是类地址总是空的 我尝试在PersonController/Create中使用构造函数和绑定 我的班级: 公共部分类人员 { [关键] 公共int PersonID{get;set;} [必需] [行政长官(40)] 公共字符串名称{get;set;} [行政长官(40)] 公共字符串电子邮件{get;set;} 公共虚拟地址地址di{get;set;} } 公共课堂演讲 { [关键] public in

我是MVC5和EF6的新手,需要帮助

我有两个类和一个视图,我可以得到类Person的值,但是类地址总是空的

我尝试在PersonController/Create中使用构造函数和绑定

我的班级:

公共部分类人员
{
[关键]
公共int PersonID{get;set;}
[必需]
[行政长官(40)]
公共字符串名称{get;set;}
[行政长官(40)]
公共字符串电子邮件{get;set;}
公共虚拟地址地址di{get;set;}
}
公共课堂演讲
{
[关键]
public int AddressID{get;set;}
[必需]
公共字符串City{get;set;}
[必需]
公共字符串Street{get;set;}
[必需]
公共虚拟人PersonDI{get;set;}
}
控制器

公共类ContatoController:控制器
{
专用只读地址\u地址;
公共人员控制员()
{
_地址=新地址();
}
HttpPost]
ValidateAntiForgeryToken]
公共操作结果创建([Bind(Include=@“Name,Email,AddressID,City,”)]个人,地址)
{
if(ModelState.IsValid)
{   
db.Person.Add(Person);
db.SaveChanges();
返回操作(“索引”);
}
返回视图(人);
}
/*其他行动和事项*/
}

这是我3天的痛苦:(

我不知道你到底想在这里实现什么。如果你想发布个人课程,那么只需发布个人:

[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)
}
[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);
}
此外,在包装类(称为viewModels)中跨控制器操作发送数据也是一种常见做法。viewModels通常包含在视图中给定时刻需要发布或显示的所有内容,以及视图的潜在参数

比如:

@model Partner
@Html.BeginForm("Create","Contato", FormMethod.Post){
  @Html.TextboxFor(p => Model.AddressDI.City)
}
[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模式的更多信息:


有一些可用的工具,如Jimmy Bogard的AutoMapper,可以帮助在视图模型和类之间复制值。

显示视图(如果没有绑定,这显然是错误的)我将尝试这样做:在您的情况下,这将是疯狂的-您的
Person
模型已经包含
Address
的属性,因此如果您正确生成了视图(您没有费心显示),那么它将正确绑定到
Person
Address
(您不需要POST方法中的
Address-Address
参数,该参数无论如何都不会绑定)问题是我在诈骗后更改了视图。但是现在可以工作了,因为我为Person和Address创建了一个部分视图。因此,您错误地更改了它,但希望我们猜测它是什么。在任何情况下,您的编辑数据都要始终使用视图模型。是的,现在我使用的是视图模型,并且可以工作100%感谢您的帮助。