から詳細をSelectListのを移入することができません:モデル
- ASP.NET 4.5.2
- MVC 5
- ノーDB、ノーログイン、単なるフロントエンドのWeb看板。
- カナダとアメリカのようなものが欠けていない限り、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;
を試してみました。同じ結果 - 「あなたは駄目だよ。
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;
}
}
}
私は
model.CountryList
に
CountryList.getCountries()
を添付しようとどこが見る
:
Cannot initialize 'DemoViewModel' with a collection initializer because it does not implement 'System.Collections.IEnumerable'
涙を髪に
まず、それだけ '' @ Html.DropDownListFor(M => m.Country、Model.CountryList、...)である必要がある - 最初のものから2番目の同一SelectListのを作成するために、その無意味。あなたのゲッターのどのコード行がエラーを投げていますか? –
---コードと私の違いがわかりません。ハイライトしてください.--- WHOOPSはそれを打ちます。長い一日だった。 –
'new SelectList(Model.CountryList、....) - 既にSelectList:を使用して、ビューに2番目のドロップダウンリストを作成する必要はありません。そして、なぜあなたが 'get 'をしていないとき(' set'それだけ)、 '_CountryList'のプライベートフィールドを持っていますか? –