[英]Drop-down list automatically becomes multiple
谁能解释为什么我的下拉列表会自动允许多选?
我对 Net Core 很陌生,这是我第一次添加下拉菜单,而且我显然做错了什么。 从技术上讲,一切正常,下拉列表被填充,模型在发布时获得正确的数据,但由于某种原因,下拉列表会自动设置多个属性。
看法
<select asp-for="@Model.fooForm.CountryRows"
asp-items="@(new SelectList(Model.fooForm.CountryRows,"CountryCode","CountryName"))"
class="form-control">
<option>Please select Country of use</option>
</select>
视图模型
namespace foo.Models.ViewModels
{
[Bind(Prefix = nameof(fooIndexRootVM.fooForm))]
public class fooVM
{
public fooVM()
{
}
public fooVM(CountryVM[] countryRows)
{
CountryRows = countryRows;
}
[Display(Name = "Country of use")]
public virtual CountryVM[] CountryRows { get; set; }
}
}
控制器/服务
public async Task<fooIndexRootVM> GetCountries()
{
var countryRows = await fooContext.Country
.OrderBy(c => c.CountryCode)
.Select(c => new CountryVM
{
CountryCode = c.CountryCode
,CountryName = c.CountryName
,CountryBlocked = c.CountryBlocked
})
.ToArrayAsync();
return new fooIndexRootVM
{
fooForm = new fooVM(countryRows)
};
}
如果 asp-for 属性中指定的属性是 IEnumerable,则 Select Tag Helper 将自动生成 multiple = "multiple" 属性。
因此,在您的情况下,它正在查看的模型表示asp-for="@Model.fooForm.CountryRows"
。
为了解决这个问题,您可以为所选国家/地区添加新属性以进行建模
public virtual CountryVM SelectedCountry { get; set; }
那么asp-for
应该是这样的:
<select asp-for="@Model.fooForm.SelectedCountry"
asp-items="@(new SelectList(Model.fooForm.CountryRows,"CountryCode","CountryName"))"
class="form-control">
<option>Please select Country of use</option>
</select>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.