Asp.net core mvc 我有一个复杂的视图模型,它构建了复杂的命名html元素。如何构建匹配的post模型?

Asp.net core mvc 我有一个复杂的视图模型,它构建了复杂的命名html元素。如何构建匹配的post模型?,asp.net-core-mvc,viewmodel,asp.net-mvc-viewmodel,Asp.net Core Mvc,Viewmodel,Asp.net Mvc Viewmodel,我有很多数据需要从控制器传递到视图,我正在尽可能使用强类型视图模型 举一个例子,你有一个数据库的人负载-我们想编辑一个人,同时也提出了一个名单,每个人都有相同的姓氏 public class person { public string ID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } public class testviewmodel {

我有很多数据需要从控制器传递到视图,我正在尽可能使用强类型视图模型

举一个例子,你有一个数据库的人负载-我们想编辑一个人,同时也提出了一个名单,每个人都有相同的姓氏

public class person
{ 
  public string ID { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

public class testviewmodel
{
 public List<person> people { get; set; }
 public person newperson { get; set; }
}
公共类人物
{ 
公共字符串ID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
公共类testviewmodel
{
公共列表人员{get;set;}
公共人物newperson{get;set;}
}
我不能使用testviewmodel作为本文的模型,因为表单/数据中还有很多内容。我已经成功地构建了一个模型,该模型包含几乎所有的表单数据,而不是来自视图模型的数据

我通过以下方式在表单中生成一些项目:

<input asp-for="newperson.Firstname" class="form-control"/>

这反过来会产生:

<input class="form-control" disabled type="text" id="newperson_Firstname" name="newperson_Firstname" value="xxxx" />

然而,我已经尝试将
newperson\u Firstname
与许多其他组合一起添加到我的模型中,我只是看不到数据

请任何人帮助我,让我知道我做错了什么-或者,我应该只是调整视图模型,使其更符合目的吗


…最后,是否有任何等效的?目前,我正在添加断点并尝试在本地打开不同的项目,但是,这是反复尝试,需要花费很多时间。。。我只是想找到表格的位置

您不需要在Request对象中到处翻找。如果将ViewModel的实例传递给post操作,则模型绑定将负责自动填充
Person
属性:

[HttpPost]
public IActionResult Edit(TestviewModel model)
{
    var person = model.Person; // add a breakpoint here, should represent the posted values
}

您应该花一点时间学习MVC Core中Modelbinding的工作原理:@MikeBrind我不会说谎-总是有更多的东西要学,但是,我觉得我确实知道Modelbinding的基础知识/已经做了很长时间了。。。我无法让viewmodels处理复杂的项目,例如:(除了我下面的答案之外,还有一件事-您的标记帮助程序似乎正在生成一个
disabled
属性。禁用控件中的值不包括在表单帖子中。我试图了解的是,表单中使用的许多其他属性不需要作为初始视图模型的一部分。我认为nk然而,我想得太多了,而且我很愚蠢,我应该对页面和帖子使用相同的视图模型,只是不填充初始加载中的字段……我会进行实验,然后回来,但谢谢你。如果你想使用标记帮助器为你想发回的所有属性生成输入,那么这些属性应该都在初始视图模型中。当然,它们不会被填充。我是个白痴,尝试使用不同的模型来发布标准视图…我可以通过向初始视图模型添加额外的字段(只是不在初始加载中使用)来确认,所有工作都完全按照预期进行。