C# Blazor自定义绑定-获取已更改模型的属性
我从SQL Server接收数据并将其加载到模型中: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; } } } 在组件中,我使用模型来显示数据。用户可以编辑数据。以
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;
}