Детали:Не удалось заполнить SelectList от модели
- ASP.NET 4.5.2
- MVC 5
- Нет БД, нет входа в систему, просто передний конец веб-щит.
- Нет необходимости в 100% точном списке стран, если такие вещи, как Канада и США, отсутствуют, это достаточно хорошо.
Я, кажется, завязываю себя в узлах здесь, пытаясь получить список стран, которые будут отображаться в выпадающем списке выбора.
Моя модель:
[DisplayName("Country")]
public string Country { get; set; }
private IEnumerable<SelectListItem> _CountryList;
public IEnumerable<SelectListItem> CountryList {
get {
List<string> CultureList = new List<string>();
CultureInfo[] getCultureInfo = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
foreach(CultureInfo getCulture in getCultureInfo) {
RegionInfo GetRegionInfo = new RegionInfo(getCulture.LCID);
if(!CultureList.Contains(GetRegionInfo.EnglishName)) {
CultureList.Add(GetRegionInfo.EnglishName);
}
}
return CultureList.OrderBy(x => x.ToString()).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() }).ToList();
}
set { _CountryList = value; }
}
Мой Вид:
@Html.DropDownListFor(model => model.Country, new SelectList(Model.CountryList, "Value", "Text"), " « ‹ Choose your country › » ", htmlAttributes: new { @class = "form-control" })
Сообщение об ошибке, возвращается это все приводит в бешенство,
System.NullReferenceException: Object reference not set to an instance of an object.
Какой код, «Вы f ** ked up, и удачи, выясняя, что это, потому что я не говорю ».
Я зашел так далеко, чтобы попытаться вручную заполнить модель вручную выбранным списком выбора, до нулевого эффекта. Где я здесь не так?
EDIT 1:
я сейчас попробовал,
RegionInfo country = new RegionInfo(new CultureInfo("en-US", false).LCID);
List<SelectListItem> countryNames = new List<SelectListItem>();
//To get the Country Names from the CultureInfo installed in windows
foreach(CultureInfo cul in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) {
country = new RegionInfo(new CultureInfo(cul.Name, false).LCID);
countryNames.Add(new SelectListItem() { Text = country.DisplayName, Value = country.DisplayName });
}
//Assigning all Country names to IEnumerable
IEnumerable<SelectListItem> nameAdded = countryNames.GroupBy(x => x.Text).Select(x => x.FirstOrDefault()).ToList().OrderBy(x => x.Text);
return nameAdded;
с нулевым успехом. Те же результаты - «u dun goofed».
EDIT 2:
Модель:
[DisplayName("Country:")]
public string Country { get; set; }
public IEnumerable<SelectListItem> CountryList { get; set; }
Вид:
@Html.DropDownListFor(model => model.Country, Model.CountryList, " « ‹ Choose your country › » ", htmlAttributes: new { @class = "form-control" })
Контроллер:
namespace Project.Controllers {
public class HomeController : Controller {
public ActionResult Index() {
return View();
}
public ActionResult Demo() {
var model = new DemoViewModel() {
model.CountryList = CountryList.getCountries()
};
return View(model);
}
}
//dummy content, just to try to "populate" ****ANYTHING****
public class CountryList {
public static IEnumerable<SelectListItem> getCountries() {
IList<SelectListItem> items = new List<SelectListItem> {
new SelectListItem{Text = "United States", Value = "B"},
new SelectListItem{Text = "Canada", Value = "B"},
new SelectListItem{Text = "United Kingdom", Value = "B"},
new SelectListItem{Text = "Texas", Value = "B"},
new SelectListItem{Text = "Washington", Value = "B"}
};
return items;
}
}
}
Вы видите, где я пытаюсь прикрепить CountryList.getCountries()
к model.CountryList
:
Cannot initialize 'DemoViewModel' with a collection initializer because it does not implement 'System.Collections.IEnumerable'
слезы из волосы
Во-первых, он просто должен быть '@ Html.DropDownListFor (м => m.Country, Model.CountryList, ...)' - его бессмысленно создать 2-й идентичную SelectList от первого. Какая строка кода в вашем получателе выдает ошибку? –
--- Я не вижу разницы между вашим кодом и моим. Пожалуйста, выделите .--- WHOOPS нанесите удар. Это был долгий день. –
Вам не нужно создавать второй раскрывающийся список в представлении, используя 'new SelectList (Model.CountryList, ....)' - его уже SelectList :). И почему у вас есть личное поле для '_CountryList', когда вы никогда не« получаете »его (только« set' it)? –