如何从列表填充 Razor MVC 4 列表<字符串>
本文关键字:列表 字符串 MVC Razor 填充 | 更新日期: 2023-09-27 18:36:21
我有一个返回字符串列表的 get 属性:
public List<string> CountryList
{
get
{
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures & CultureTypes.NeutralCultures))
{
RegionInfo ri = new RegionInfo(ci.LCID);
CountryList.Add(ri.EnglishName);
}
return CountryList;
}
}
我想创建一个引导下拉框,并使用 Razor 引擎使用此列表填充它。
这是我的尝试:
@Html.DropDownListFor(model => model.Country, model.CountryList, "-- Select Country --")
首先,您不希望将代码包含在模型中。您应该在控制器中填充国家/地区列表。另外,将您的国家/地区列表更改为如下所示的List<SelectListItem>
:
public List<SelectListItem> CountryList { get; set; }
并且,将其填充到控制器操作中,如下所示:
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures & CultureTypes.NeutralCultures))
{
RegionInfo ri = new RegionInfo(ci.LCID);
CountryList.Add(new SelectListItem
{
Text = ri.EnglishName,
Value = ri.EnglishName
});
}
然后,以下是您的视图中的内容:
@Html.DropDownListFor(model => model.Country, model.CountryList, "-- Select Country --")
顺便说一下,我建议您在模型中使用国家/地区代码作为属性,而不是国家/地区名称,并将代码更改为以下内容以填充您的国家/地区列表:
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures & CultureTypes.NeutralCultures))
{
RegionInfo ri = new RegionInfo(ci.LCID);
CountryList.Add(new SelectListItem
{
Text = ri.EnglishName,
Value = ri.Name
});
}
最后,在开始编码之前,请阅读有关 asp.net MVC 的更多信息。
由于您已经有一个List<string>
的CountryList
,因此您可以在视图中简单地执行此操作。
在你的cshtml页面中,把它写在代码块中
@{
var CountryList = Model.CountryList.Select(x=> new SelectListItem{ Text = x, Value = x}).ToList();
}
然后只需将您的下拉代码更改为
@Html.DropDownListFor(model => model.Country, CountryList, "-- Select Country --")
// note that we are using the newly created variable
我知道逻辑必须在控制器端,而不是在视图中混淆,因为它是 MVC 的目标,如果您根本无法返回并清理控制器或遇到其他一些问题,这是一种解决方法您无法采取这种方法。
DropdownListFor
的第二个参数是 SelectListItem
的IEnumerable
,并且您正在尝试传递List
字符串。
Razor
需要一个SelectListItem
列表,这样他就可以理解集合中每个对象的值是什么,以及要显示的文本是什么。
这样做应该适合您:
public IEnumerable<SelectListItem> CountryList
{
get
{
var _countryList = new List<SelectListItem>();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures & CultureTypes.NeutralCultures))
{
RegionInfo ri = new RegionInfo(ci.LCID);
var selectListItem = new SelectListItem();
selectListItem.Value = ci.LCID.ToString(); //Value of the object, should be unique
selectListItem.Text = ri.EnglishName; //Text that will be displayed
_countryList.Add(selectListItem);
}
return _countryList;
}
}