我在Blazor服务器端应用程序中有一个简单的EditForm。它有一个绑定属性,该属性更改了另一个也应通过表单验证的属性。
该表格包含以下部分
<div class="form-group col-md-6">
<label for="inputRechnungsnummer">Rechnungsnummer</label>
<InputNumber @bind-Value="Input.Rechnungsnummer" id="inputRechnungsnummer" class="form-control" />
<ValidationMessage For="() => Input.CustomerExists" />
<ValidationMessage For="() => Input.Rechnungsnummer" />
</div>
正如您所看到的,我希望在此InputField下显示两条消息。
bond字段调用一个方法来查找客户详细信息。
public int Rechnungsnummer
{
get => _rechnungsnummer;
set
{
_rechnungsnummer = value;
SearchKunde();
}
}
此方法更改了我的属性的值
private void SearchKunde()
{
/* LOGIC */
if(name != null)
{
Kundenname = name;
CustomerExists = true;
}
else
{
Kundenname = "";
CustomerExists = false;
}
}
第二个属性定义为:
[Required]
[Range(typeof(bool), "true", "true", ErrorMessage = "Bitte geben Sie eine gültige Rechnungsnummer ein")]
public bool CustomerExists { get; set; }
但是,不会显示CustomerExists的验证消息。它只在我尝试提交表格时显示。
有人知道在消息的值被更改后,我如何才能显示消息吗?
我认为这里有一些问题。
1:Blazor不会报告属性的错误,除非您(A(在Blazor输入控件中编辑它(使属性"修改"(,或(B(调用EditContext.Validate
来验证所有属性。
2:如果您的代码异步运行,那么您还需要在最后调用InvokeAsync(StateHasChanged)
。
或者,如果您将表单绑定到EditContext
而不是Model
,则可以执行类似的操作
<EditForm EditContext=@MyEditContext>
... your form stuff here...
</EditForm>
@code
{
EditContext MyEditContext = new EditContext(new Person());
protected override void OnInitialized()
{
base.OnInitialized();
MyEditContext.OnFieldChanged += FieldChanged;
}
private void FieldChanged(object sender, FieldChangedEventArgs args)
{
if (args.FieldIdentifier.FieldName == nameof(Person.FirstProperty))
{
FieldIdentifider fd = MyEditContext.Field(nameof(Person.OtherProperty));
MyEditContext.NotifyFieldChanged(fd);
}
}
}
如果你想得到一个不直接在你的EditForm
绑定到的对象上的属性(例如Model.Address.PostalCode
(,你可以做这个
var fd = new FieldIdentifier(Model.Address, nameof(Address.PostalCode));
MyEditContext.NotifyFieldChanged(fd);