2

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; }
    }

如何检查输入值的存在并验证它?

4

0 回答 0