带有参数的模态在被取消后仍然应用更改

Modal with Parameters still apply changes after beeing canceled

以下问题,下面的代码显示了一个模式,我可以在其中编辑关于机器的信息,问题是当我对表单中的参数应用更改时,我点击取消,更改将应用​​到参数, 所以就像我点击更新一样。

也许它很简单,我只是没看到它,我对 C# 和 Blazor 还比较陌生。如果有人能帮忙就太好了:)

private async Task Edit Machine(PhysicalMachineInfo machineInfo)
{
var parameters = new ModalParameters();
parameters.Add(nameof(CreatePhysicalMachineModal.physicalMachine), machineInfo);
var createMachineEntryModal = Modal.Show<CreatePhysicalMachineModal>("Edit MachineInfo",parameters); 
var modalResult = await createMachineEntryModal.Result;

if (!modalResult.Cancelled)
{
_ = LoadMachines();
}
}

您正在使用此行创建参数

parameters.Add(nameof(CreatePhysicalMachineModal.physicalMachine), machineInfo);

并使用这行代码将参数发送到模态形式,并且在模态形式中参数绑定到输入控件

var createMachineEntryModal = Modal.Show<CreatePhysicalMachineModal>("Edit MachineInfo",parameters);

然而,对象是通过引用传递的,通过击键或任何其他方式对其属性所做的任何更改都将更改源中的对象属性,即使您取消编辑也是如此。

此问题的一个解决方案是创建一个新的参数副本并将其发送到模态表单

您可以像这样创建 machineInfo 对象的副本,使用 Newtonsoft 库或可以使用任何其他 JSON 序列化程序

 string obj =  Newtonsoft.Json.JsonConvert.SerializeObject(machineInfo);
 copyMachineInfo =  Newtonsoft.Json.JsonConvert.DeserializeObject<PhysicalMachineInfo>(obj);