简体   繁体   English

Blazor 输入 + 数据列表如何将所选项目绑定到对象

[英]Blazor input + datalist How to bind selected item to object

Kind of first touch on Blazor, and I have the following Component content:第一次接触 Blazor,我有以下组件内容:

<div class="form-group row">

<label class="col-2 col-form-label" for="PartnerInput">Partner:</label>
<input id="PartnerInput" list="Partners" />
<datalist class="col-4" id="Partners" >
    @foreach (var partner in partners)
    {
        <option value="@partner.Name"></option>
    }
</datalist>

<label class="col-auto col-form-label">@($"Partner ID: {SelectedPartner.Id}")</label>

and the code block:和代码块:

@code {

[Parameter]
public string companyName { get; set; }

private List<Partner> partners;

private Partner _selectedPartner;
public Partner SelectedPartner
{
    get { return _selectedPartner; }
    set { _selectedPartner = value; }
}


protected override async Task OnInitializedAsync()
{
    var company = await CompanyService.GetCompanyByNameAsync(companyName);
    partners = await DataService.GetPartnersAsync();
}

How can I get the selected partner from the datalist into my SelectedPartner property?如何从数据列表中获取选定的合作伙伴到我的 SelectedPartner 属性中? Can I achieve it simply with binding, or do I need a string property that I can bind="@..." in the input tag and then in code find the selected partner by name and save into my SelectedPartner object - which sounds like a bad workaround我可以简单地通过绑定来实现它,还是我需要一个字符串属性,我可以在输入标签中绑定 =“@...”,然后在代码中按名称查找选定的合作伙伴并保存到我的 SelectedPartner 对象中 - 这听起来像一个糟糕的解决方法

This is the best solution I could come up with... There is no magic way to do it with data-binding as the input element is bound to the datalist object.这是我能想到的最好的解决方案......没有神奇的方法可以通过数据绑定来实现,因为输入元素绑定到数据列表对象。 My solution is more or less as the one you suggested.我的解决方案或多或少如您所建议的那样。 Here's the code:这是代码:

 <div class="form-group row">
    <label class="col-2 col-form-label" for="PartnerInput">Partner:</label>
    <input id="PartnerInput" list="Partners" @onchange="@((args) => name = args.Value.ToString())" />
    <datalist class="col-4" id="Partners">
        @foreach (var partner in partners)
        {
            <option value="@partner.Name"></option>

        }
    </datalist>

    @if (SelectedPartner != null)
    {
    <label class="col-auto col-form-label">@($"Partner Name: {SelectedPartner.Name}, Partner ID: {SelectedPartner.Code}")</label>
    }
</div>

@code {

private List<Partner> partners;
private string name;


private Partner SelectedPartner => 
                          partners.FirstOrDefault(a => a.Name == name);

protected override void OnInitialized()
{
    partners = Enumerable.Range(1, 10).Select(i => new Partner { Code = i.ToString(), Name = $"Partner {i.ToString()}" }).ToList();
}

public class Partner
{

    public string Code { get; set; }
    public string Name { get; set; }

}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM