gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:14:42 25 4
gpt4 key购买 nike

我在 Blazor 服务器端应用程序中有一个简单的 EditForm。它有一个绑定(bind)属性,可以更改另一个属性,该属性也应该由表单验证。

该表单包含以下部分

<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)

或者,如果您将表单绑定(bind)到 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 绑定(bind)到的对象上的属性(例如 Model.Address.PostalCode),您可以这样做

var fd = new FieldIdentifier(Model.Address, nameof(Address.PostalCode));
MyEditContext.NotifyFieldChanged(fd);

关于c# - Blazor 获取两个属性的验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63814356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com