如何从列表填充 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 --")

如何从列表填充 Razor MVC 4 列表<字符串>

首先,您不希望将代码包含在模型中。您应该在控制器中填充国家/地区列表。另外,将您的国家/地区列表更改为如下所示的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 的第二个参数是 SelectListItemIEnumerable,并且您正在尝试传递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;
    }
}