我在一个剃刀组件中有一个简单的表单,其中有一个名为Name的输入字段。如果它是空的,则会正确显示错误消息,并对数据注释进行验证。但是我也有一个自定义的验证,但是这个消息只在ValidationSummary中显示,而不在ValidationMessage中显示。
我的代码如下所示:
<EditForm EditContext="@_editContext">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<label class="control-label">Name:</label>
<InputText id="countryCode" @bind-Value="_model.Name" class="form-control" />
<ValidationMessage For="@(() => _model.Name)" />
</div>
<button type="submit">Submit</button>
</EditForm>
@code {
class MyModel
{
[System.ComponentModel.DataAnnotations.Required]
public string Name { get; set; }
}
private EditContext _editContext;
private MyModel _model = new MyModel();
protected override void OnInitialized()
{
_editContext = new EditContext(_model);
var messages = new ValidationMessageStore(_editContext);
_editContext.OnFieldChanged +=
(sender, eventArgs) => ValidateFields((EditContext)sender, messages, eventArgs.FieldIdentifier);
}
private void ValidateFields(EditContext editContext, ValidationMessageStore messages, FieldIdentifier field)
{
messages.Clear();
if (field.FieldName == nameof(_model.Name))
{
if(!string.IsNullOrEmpty(_model.Name) && !char.IsUpper(_model.Name[0]))
{
messages.Add(editContext.Field(_model.Name), "Name should start with a capital.");
editContext.NotifyValidationStateChanged();
}
}
}
}如果将该字段保留为空,则会得到以下结果:

如果我输入了一个错误的名字,我只能得到这样的结果:

发布于 2020-04-24 14:49:13
只需替换:
messages.Add(editContext.Field(_model.Name), "Name should start with a capital.");使用
messages.Add(() => _model.Name, "Name should start with a capital.");那么它应该工作得很好。
https://stackoverflow.com/questions/61402726
复制相似问题