Blazor获取两个属性的验证消息



我在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);

相关内容

  • 没有找到相关文章

最新更新