【发布时间】:2021-02-03 10:15:55
【问题描述】:
在这里,我正在使用 blazor 服务器应用程序在更改国家下拉列表中填充城市下拉列表。在这里我做了CustomInputSelect 以避免错误Microsoft.AspNetCore.Components.Forms.InputSelect1[System.Int32] 不支持类型'System.Int32'`。
但问题是 onchange 事件不会触发,也不会触发countyClicked 方法,因此城市下拉菜单不会根据国家下拉菜单的变化来填充。
下面是我的带有自定义输入选择的剃须刀组件 html
<EditForm Model="@PersonModel" OnValidSubmit="postPerson">
<CustomInputSelect @bind-Value="PersonModel.CountryId" class="form-control" @onchange="countyClicked">
<option value="">Select country</option>
@foreach (var item in Countries)
{
<option value="@item.CountryId">@item.CountryName</option>
}
</CustomInputSelect>
<CustomInputSelect class="form-control mb-2 mr-sm-2" @bind-Value="PersonModel.CityId">
@foreach (var city in Cities)
{
<option value="@city.CityId">@city.CityName</option>
}
</CustomInputSelect>
</EditForm>
下面是我的countyClicked方法
public void countyClicked(ChangeEventArgs args)
{
var getCountryId = args.Value.ToString();
int.TryParse(getCountryId, out int countryId);
Cities = mainService.GetAllCityByCountryId(countryId);
}
下面是我的 CustomInputSelect
public class CustomInputSelect<TValue> : InputSelect<TValue>
{
protected override bool TryParseValueFromString(string value, out TValue result,
out string validationErrorMessage)
{
if (typeof(TValue) == typeof(int))
{
if (int.TryParse(value, out var resultInt))
{
result = (TValue)(object)resultInt;
validationErrorMessage = null;
return true;
}
else
{
result = default;
validationErrorMessage =
$"The selected value {value} is not a valid number.";
return false;
}
}
else
{
return base.TryParseValueFromString(value, out result,
out validationErrorMessage);
}
}
}
【问题讨论】:
-
升级到 Net5.0... InputSelect 支持 int 和 enum 类型...
标签: c# asp.net-core entity-framework-core blazor blazor-server-side