我有一个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;
}
}
我想创建一个bootstrap下拉框,并使用Razor引擎将其填充到此列表中。
这是我的尝试:
@Html.DropDownListFor(model => model.Country, model.CountryList, "-- Select Country --")
答案 0 :(得分:0)
首先,您不希望在模型中包含代码。您应该在Controller中填充CountryList。另外,将CountryList更改为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 --")
顺便提一下,我建议您使用模型中的CountryCode作为属性,而不是国家/地区名称,并更改代码以将CountryList填充到此:
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的更多信息。
答案 1 :(得分:0)
由于您已经拥有CountryList
List<string>
,因此您可以在视图中执行此操作。
在你的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的目标,这是一种解决方法,如果你根本不能回去清理你的控制器或者由于你不能采取这种方法。
答案 2 :(得分:-1)
DropdownListFor
的第二个参数是IEnumerable
SelectListItem
,您尝试传递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;
}
}