如何从下拉列表中获取所选项目?

问题描述

我正在编写Blazor应用程序,并且我的Razor文件具有用于邮政编码的下拉列表。 (从CSV文件填充)

某些城市使用相同的邮政编码。

Zip,City
00000,CityA
00000,CityB

选择城市时,这是我的代码

private void SetModel(string zipCode)
{
     var places = places.FirstOrDefault(p => p.ZipCode == zipCode);
     _model.City = place.City;
     _model.State = place.State;
     _model.ZipCode = place.ZipCode;
}

我知道FirstOrDefault将始终获得第一项,但是我不知道应该修改什么代码,以便获得用户选择的项

我的Razor文件中的代码

 <RadzenDropDown Id="locations" AllowFiltering="true" LoadData="@ChangedLocation" Data="@places" TextProperty="Key" ValueProperty="ZipCode" Change="o => SetModel(o.ToString())" />

解决方法

首先,我假设您至少有一个拉链模型:

public class Zip
{
    public string ZipCode { get; set; }
}

使用 radzen 组件,这应该可以在您的 razor 组件标记部分实现:

<RadzenDropDown TValue="string" AllowClear="true" AllowFiltering="true" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive" Data="@_zipList" 
            TextProperty="ZipCode" ValueProperty="ZipCode" Change=@(args => OnChange(args) />

最后是组件的代码部分:

List<Zip> _zipList;
List<Place> _places;
SomeModel _model;

protected override void OnInitialized()
{
    _zipList = SomeZipService.GetAll();
    _places = SomePlaceService.GetAll();
}

private void OnChange(object args)
{
    var place = places.FirstOrDefault(p => p.ZipCode == args.ToString());
    _model.City = place.City;
    _model.State = place.State;
    _model.ZipCode = place.ZipCode;
}

或者,您可以使用 bind-Value 参数将其绑定到一个参数,而不是将任何内容传递给 OnChange 方法。

,

我不确定您使用的是哪个组件(RazdenDropDown?应该是Radzen吗?)。但是,使用Blazor InputSelect组件,您可以按以下方式进行操作:

<InputSelect @bind-Value="City"> //value will be returned in City variable.
    @foreach (var item in ZipCodes)
    {
      <option value="@item.zipcode">@item.City</option>
    }
</InputSelect>

在您的代码中:

string City;
//you could intialize City as well when the component is first rendered.
var x = City; //city will contain the zipcode

请注意,从Blazor的InputSelect获取价值看似简单。该值在绑定变量中返回,在这种情况下为City。因此,当用户选择一个新的邮政编码时,它将在变量City中返回。因此,在保存数据时,只需使用当前在“城市”中的值即可。

如果您使用的是Radzen的下拉菜单,他们的文档应向您展示如何获取返回值。