如何绑定到现有对象集合中的一个 属性
How to bind to one property of an existing collection of objects
我正在创建 ASP.NET Core Razor Pages 应用程序。我有一组对象,这些对象具有多个已设置的属性,其中一个 属性 需要设置。我不确定如何在保持其他属性的现有值的同时将输入绑定到那个 属性。
我看过有关如何建模绑定到复杂集合的资源,但我认为这种方法行不通,因为这似乎创建了对象类型的新实例,我希望能够做到这与我现有的对象集合。编辑:https://www.learnrazorpages.com/razor-pages/model-binding
例如
List<MyObject> objectList;
class MyObject {
public int propertyA { get; set; }
public int propertyB { get; set; }
public int propertyC { get; set; }
}
在上述示例的上下文中,我想将我的输入绑定到 objectList 集合,但我只想绑定到 属性C(在其他某个时间点,属性所有这些对象的 A 和 属性B 已经建立)
您可以使用 foreach 将数据绑定到 propertyC,例如:
foreach (var item in objectList)
{
item.propertyC = 50; //Bind the value that you want
}
这取决于您为输入命名;它需要采用 CollectionProperty[N].PropertyC
的形式,其中 N
是索引。假设您都绑定到 List<MyObject>
并将其用作您的视图模型:
@for (var i = 0; i < Model.Count; i++)
{
<input asp-for="@Model[i].PropertyC" />
}
这对应于一个动作参数,例如:
public IActionResult Foo(List<MyObject> myObjects)
但是,我认为您实际上 苦恼的是您的"existing" collection 实际上并不存在。每个请求都是唯一的,唯一存在的是与该请求一起发送的内容。您最初使用一些 collection 填充视图这一事实是无关紧要的。除非你 post 备份完整 collection,否则它不再存在。
不是说你应该post它回来。任何被 posted 的东西都可能被修改,如果你不想 PropertyA
和 PropertyB
被修改,它们不应该被 posted。那么,那会给你留下什么?映射。
您想要做的是 post 所有项目 PropertyC
。然后,您可以获取完全填充的 MyObject
实例列表,无论您如何处理(查询数据库等)。然后,您遍历一个列表或另一个列表,并将 PropertyC
的值映射到完全填充的列表:
for (var i = 0; i < existingMyObjects.Count; i++)
{
existingMyObjects[i].PropertyC = myObjects[i].PropertyC;
}
FWIW,您可能还想 post 关联 ID 或类似 ID。上述方法依赖collection前后顺序相同,并不总是保证。
我正在创建 ASP.NET Core Razor Pages 应用程序。我有一组对象,这些对象具有多个已设置的属性,其中一个 属性 需要设置。我不确定如何在保持其他属性的现有值的同时将输入绑定到那个 属性。
我看过有关如何建模绑定到复杂集合的资源,但我认为这种方法行不通,因为这似乎创建了对象类型的新实例,我希望能够做到这与我现有的对象集合。编辑:https://www.learnrazorpages.com/razor-pages/model-binding
例如
List<MyObject> objectList;
class MyObject {
public int propertyA { get; set; }
public int propertyB { get; set; }
public int propertyC { get; set; }
}
在上述示例的上下文中,我想将我的输入绑定到 objectList 集合,但我只想绑定到 属性C(在其他某个时间点,属性所有这些对象的 A 和 属性B 已经建立)
您可以使用 foreach 将数据绑定到 propertyC,例如:
foreach (var item in objectList)
{
item.propertyC = 50; //Bind the value that you want
}
这取决于您为输入命名;它需要采用 CollectionProperty[N].PropertyC
的形式,其中 N
是索引。假设您都绑定到 List<MyObject>
并将其用作您的视图模型:
@for (var i = 0; i < Model.Count; i++)
{
<input asp-for="@Model[i].PropertyC" />
}
这对应于一个动作参数,例如:
public IActionResult Foo(List<MyObject> myObjects)
但是,我认为您实际上 苦恼的是您的"existing" collection 实际上并不存在。每个请求都是唯一的,唯一存在的是与该请求一起发送的内容。您最初使用一些 collection 填充视图这一事实是无关紧要的。除非你 post 备份完整 collection,否则它不再存在。
不是说你应该post它回来。任何被 posted 的东西都可能被修改,如果你不想 PropertyA
和 PropertyB
被修改,它们不应该被 posted。那么,那会给你留下什么?映射。
您想要做的是 post 所有项目 PropertyC
。然后,您可以获取完全填充的 MyObject
实例列表,无论您如何处理(查询数据库等)。然后,您遍历一个列表或另一个列表,并将 PropertyC
的值映射到完全填充的列表:
for (var i = 0; i < existingMyObjects.Count; i++)
{
existingMyObjects[i].PropertyC = myObjects[i].PropertyC;
}
FWIW,您可能还想 post 关联 ID 或类似 ID。上述方法依赖collection前后顺序相同,并不总是保证。