C# Blazor自定义绑定-获取已更改模型的属性

C# Blazor自定义绑定-获取已更改模型的属性,c#,blazor,C#,Blazor,我从SQL Server接收数据并将其加载到模型中: namespace BlazorServer.Models { public class Animal { public int height { get; set; } public string name { get; set; } public string origin { get; set; } } } 在组件中,我使用模型来显示数据。用户可以编辑数据。以

我从SQL Server接收数据并将其加载到模型中:

namespace BlazorServer.Models
{
    public class Animal
    {
        public int height { get; set; }

        public string name { get; set; }

        public string origin { get; set; }
    }
}
在组件中,我使用模型来显示数据。用户可以编辑数据。以下是一个示例:

<input @onchange="args => ValueChanged(args)" value="@animal.name" class="form-control form-control-sm border rounded" />

我想更新组件中的模型(相当于blazor的绑定)立即将数据发送到SQL server。

blazor附带了
EditForm
,它管理
EditContext
,还有一组输入控件-
InputText
,在您的例子中,它与
EditContext
接口。您可以访问
EditContext
,在
OnFieldChanged
上注册事件处理程序并获取更改事件。您将获得一个
FieldIdentifier
,可用于标识已更改的字段

见-

下面是一个简单的razor页面,使用
EditContext
onfielChanged

@page”/Test
@实现IDisposable
动物:
来源:
FieldChanged:@this.FieldChanged @代码{ 公营动物 { 公共整数高度{get;set;} 公共字符串名称{get;set;} 公共字符串源{get;set;} } 私人动物模型=新动物(){height=2,name=“giraffe”,origin=“Africa”}; 私有编辑上下文编辑上下文; 私有字符串FieldChanged=“无”; 受保护的覆盖任务OnInitializedAsync() { this.editContext=新的editContext(模型); this.editContext.OnFieldChanged+=this.OnFieldChanged; 返回base.OnInitializedAsync(); } 私有void OnFieldChanged(对象发送方,FieldChangedEventArgs e) { var x=e.FieldIdentifier; this.FieldChanged=e.FieldIdentifier.FieldName; } //需要实现IDisosable以取消钩住事件处理程序 公共空间处置() { this.editContext.OnFieldChanged-=OnFieldChanged; } }
这项功能正常工作。剩下的一个问题是:如何获取已更改字段的旧/新值?这取决于旧值的含义。开箱即用控件的问题在于,您只能看到新值和最后一个值。如果进行多次编辑,您将无法跟踪原始值。我个人使用我编写的名为EditStateControl的控件来跟踪原始值的更改。在我的个人GitHub网站上有一些信息-。如果要使用,请提升/复制代码。最后一个值和新值将符合我的需要。我的模型有多个属性(名称、原点、高度)。如何获取在OnFieldChanged事件中更改的属性的最后一个值和新值?
private void ValueChanged(ChangeEventArgs args)
{
    var newValue = args.Value;
}