Mar*_*ein 1 c# asp.net-core blazor blazor-server-side
我在 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>
Run Code Online (Sandbox Code Playgroud)
如您所见,我想在这个 InputField 下显示两条消息。
bond 字段调用一个方法来查找客户详细信息。
public int Rechnungsnummer
{
get => _rechnungsnummer;
set
{
_rechnungsnummer = value;
SearchKunde();
}
}
Run Code Online (Sandbox Code Playgroud)
这个方法改变了我的属性值
private void SearchKunde()
{
/* LOGIC */
if(name != null)
{
Kundenname = name;
CustomerExists = true;
}
else
{
Kundenname = "";
CustomerExists = false;
}
}
Run Code Online (Sandbox Code Playgroud)
第二个属性定义为:
[Required]
[Range(typeof(bool), "true", "true", ErrorMessage = "Bitte geben Sie eine gültige Rechnungsnummer ein")]
public bool CustomerExists { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,不会显示 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想获得一个不直接在你EditForm绑定的对象上的属性(例如Model.Address.PostalCode),你可以这样做
var fd = new FieldIdentifier(Model.Address, nameof(Address.PostalCode));
MyEditContext.NotifyFieldChanged(fd);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |