在我的表中,我有一个名为PersonList
的List操作类型Person
。当单击一行时,类型为Person
的另一个对象(Model(将设置为该行的值,因此我的EditForm
将使用该值进行更新。到目前为止还不错。
但是,当我更改EditForm
中的te值时,我的List也会使用该值进行更新。
这怎么可能?如何预防?
非常感谢!
<h3>Component</h3>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
@foreach (var person in PersonList)
{
<tr @onclick="@(() => ActivateItem(person))">
<td>@person.Id</td>
<td>@person.Name</td>
<td>@person.Age</td>
</tr>
}
</tbody>
</table>
<EditForm Model="Model">
<InputText @bind-Value="Model.Name" />
<InputNumber @bind-Value="Model.Age" />
</EditForm>
@code {
private List<Person> PersonList = new List<Person>();
private Person Model = new Person();
private void ActivateItem(Person person)
{
Model = person;
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
protected override void OnInitialized()
{
PersonList.Add(new Person
{
Id = 1,
Name = "Jack",
Age = 20
});
PersonList.Add(new Person
{
Id = 2,
Name = "Paul",
Age = 25
});
PersonList.Add(new Person
{
Id = 3,
Name = "Brad",
Age = 30
});
}
}
这是因为您保留了对对象的引用,绑定值是双向绑定。一点也不奇怪。
一种解决方案是使用单向绑定,另一种解决方法是通过安装新对象来从对象中删除引用。类似这样的东西:
private void ActivateItem(Person person)
{
Model = new Person
{
Id = person.Id,
Name = person.Name,
Age = person.Age
};
}