如何将对象绑定到 Blazor 中的 <select> 选项?

问题描述 投票:0回答:4

我有以下下拉菜单:

public class object {
    public other_object apple {get; set;}
    ...
    public string stuff {get; set;}
    ...
}

public class other_object {
    public string id {get; set;}
    public string name {get; set;}
}

<select class="custom-select" @bind="@object.apple">
     <option value="@object.apple">@object.apple.name</option>
     ...
</select>

我想将选择绑定到一个对象,但只想显示该对象的某些属性。这会给我错误:

System.InvalidOperationException:类型“other_object”不 有一个 关联的 TypeConverter 支持字符串转换。申请 'TypeConverterAttribute' 到要注册转换器的类型。

这可以做到吗?我不太确定类型转换器是如何工作的。

c# html blazor webassembly
4个回答
7
投票

您无法绑定到

other_object
,您可以绑定到
other_object
的字符串属性或使用
TypeConverterAttribute
other_object
转换为字符串。

您的代码可以是:

<select class="custom-select" @bind="@_selected.id">
     <option value="@object.apple.id">@object.apple.name</option>
     ...
</select>
@code {
    private other_object _selected = new other_object();
    ...
}

4
投票

以下是使用

<select>
@bind-Value:get
将对象绑定到 Blazor 中的
@bind-Value:set
选项的解决方案。在此示例中,我们使用
<InputSelect>
将选定值绑定到
selected
属性,并定义
SetSelected
方法以使用从
object
列表中选定的对象更新
ListOtherObjects
对象。

<InputSelect @bind-Value:get="selected" @bind-Value:set="SetSelected" class="form-control">
    <option value="">Select an option</option>
    @foreach (var value in ListOtherObjects)
    {
        <option value="@value.Id">@value.name</option>
    }
</InputSelect>

@code {
    private string selected = null!;
    private List<other_object> ListOtherObjects = new() { new() { id = 1, name = "name1" }, new() { id = 2, name = "name2" } };
    public object object { get; set; } = new();

    void SetSelected(string value)
    {
        var _ = ListOtherObjects.Find(e => e.Id == value);
        if (_ != null)
            object.apple = _;
        selected = value;
    }
}

我希望这个解决方案对您有所帮助。如果您有任何疑问或需要更多信息,请告诉我。


3
投票

如果出于任何原因您需要在此处创建对象,您可以这样做:

<InputSelect @bind-Value="@object.apple.id" @onchange="@((args) => @object.apple = new other_object { id = (int)args.Value })" class="form-control">
      <option value="@object.apple.id">@object.apple.name</option>                        
</InputSelect>

0
投票

如果您有可供选择的对象列表,则可以使用 Radzen Blazor 组件 自定义对象绑定下拉列表

    <RadzenDropDown [email protected] TValue="other_object" @[email protected]/>
© www.soinside.com 2019 - 2024. All rights reserved.