Blazor 服务器应用 (.Net 5.0)、Dapper
在我的(Razor)表单上,我有一个字段“名称”,我需要在输入时检查它。在页面加载时,OnInitializedAsync()
我从数据库中获取所有名称为List<string> names
. 然后当用户输入一个新名称时,我需要触发CheckNames()
方法来检查<InputText>
列表中是否存在的值 -标签的值names.Contains(inputValue)
在哪里。如果存在,则显示一条消息,说明该值已存在。问题是 - 我不知道如何从 C# 代码中引用 HTML 标签。或者也许我的验证逻辑是错误的。inputValue
<InputText>
详细信息:我在页面加载时获取所有名称,因为使用事件检查内存中列表中的名称是否存在会更快onchange
,而不是当用户在表单中键入新名称时每次都为每个字母查询 SQL。另一种方法是在表单提交阶段检查 SQL 中的名称是否存在。但是,我倾向于从 fetched 列表中使用“检查输入”方法。
这是我的简化代码:
<div class="container float-sm-left">
<EditForm Model="@partner" OnValidSubmit="@InsertItem" class="form-horizontal">
<DataAnnotationsValidator />
<div class="form-group row">
<label class="col-form-label col-sm-4 text-right">Name</label>
<div class="col-sm-8">
<InputText @bind-Value="partner.Name" class="form-control" id="pname" name="pname" />
</div>
</div>
<button type="submit" class="btn btn-primary">Save</button>
<button @onclick="@Cancel" type="reset" class="btn btn-secondary">Cancel</button>
</EditForm>
</div>
@code {
private Partner partner = new Partner();
private List<string> partnerNames = new List<string>();
void CheckName()
{
if(partnerNames.Contains(inputValue)) // inputValue - a value from <InputText>
{
// show validation message and prevent form submit
}
}
protected override async Task OnInitializedAsync()
{
var partners = await PartnerService.GetAllAsync();
partnerNames = partners.Select(x => x.Name).ToList();
}
protected async Task InsertItem()
{
await PartnerService.InsertAsync(partner);
await BlazoredModal.Close(ModalResult.Ok<Partner>(partner));
}
void Cancel()
{
BlazoredModal.Close(ModalResult.Cancel());
}
[CascadingParameter] BlazoredModalInstance BlazoredModal { get; set; }
string Message { get; set; }
}
如何检查输入值的存在并验证它?