在控制器中为 DropDownListFor 设置选定值在剃刀视图中不起作用
Set selected value for DropDownListFor in controller does not work in razor view
我的控制器里有这个:
[Route("Checkout")]
public ActionResult Checkout()
{
var sb = new ShoppingBagViewModel();
sb.DestinationCountry = "Netherlands"; // I hoped that this was sufficient
sb.CountriesSl.Single(c => c.Text.Equals("Netherlands", StringComparison.InvariantCultureIgnoreCase)).Selected = true;
return View(sb);
}
Visual Studio 中的快速观察确认 CountriesSl(List<SelectListItem>
类型)具有选定值。 (荷兰)
这是我的观点:
@Html.DropDownListFor(m => m.DestinationCountry, Model.CountriesSl)
DestinationCountry
在我的视图模型中也是一个字符串道具。
我知道有很多类似的问题,但我已经看了很多,但我没有看到。
我也试过:
@Html.DropDownListFor(m => Model.DestinationCountry, Model.CountriesSl)
请不要只给我答案,还要说明我的错误是什么。
编辑 以明确问题所在:我在剃须刀视图中得到一个不错的选项列表,但没有项目 "selected" 只有第一个。当我查看生成的 html 时,也没有选择的项目。
为 Ric 编辑
public List<SelectListItem> CountriesSl
{
get
{
List<SelectListItem> _countries = HttpContext.Current.Cache["slCountries"] as List<SelectListItem>;
if (_countries == null)
{
_countries = new List<SelectListItem>();
foreach (string s in System.IO.File.ReadLines(System.Web.Hosting.HostingEnvironment.MapPath("~/tmpwrite/countries.csv")))
{
var tmp = s.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
_countries.Add(new SelectListItem() { Text = tmp[1], Value = tmp[0], Selected = false });
}
HttpContext.Current.Cache.Add("slCountries", _countries.OrderBy(c => c.Text).ToList(), null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(24, 0, 0), System.Web.Caching.CacheItemPriority.Normal, null);
}
return _countries;
}
}
DropDownListFor
尝试自动匹配提供的枚举中接收 属性 的值。我一开始也有这个问题。
改为提供视图模型中的任何实体列表。我通常使用 IDictionary<int, string>
之类的东西。然后像这样创建下拉列表:
Html.DropDownListFor(m=>m.DestinationCountry, new SelectList(Model.Countries, "Key", "Value"))
然后 SelectList 将自动设置其 Key 与 DestinationCoutry 匹配的正确选项。
我的控制器里有这个:
[Route("Checkout")]
public ActionResult Checkout()
{
var sb = new ShoppingBagViewModel();
sb.DestinationCountry = "Netherlands"; // I hoped that this was sufficient
sb.CountriesSl.Single(c => c.Text.Equals("Netherlands", StringComparison.InvariantCultureIgnoreCase)).Selected = true;
return View(sb);
}
Visual Studio 中的快速观察确认 CountriesSl(List<SelectListItem>
类型)具有选定值。 (荷兰)
这是我的观点:
@Html.DropDownListFor(m => m.DestinationCountry, Model.CountriesSl)
DestinationCountry
在我的视图模型中也是一个字符串道具。
我知道有很多类似的问题,但我已经看了很多,但我没有看到。
我也试过:
@Html.DropDownListFor(m => Model.DestinationCountry, Model.CountriesSl)
请不要只给我答案,还要说明我的错误是什么。
编辑 以明确问题所在:我在剃须刀视图中得到一个不错的选项列表,但没有项目 "selected" 只有第一个。当我查看生成的 html 时,也没有选择的项目。
为 Ric 编辑
public List<SelectListItem> CountriesSl
{
get
{
List<SelectListItem> _countries = HttpContext.Current.Cache["slCountries"] as List<SelectListItem>;
if (_countries == null)
{
_countries = new List<SelectListItem>();
foreach (string s in System.IO.File.ReadLines(System.Web.Hosting.HostingEnvironment.MapPath("~/tmpwrite/countries.csv")))
{
var tmp = s.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
_countries.Add(new SelectListItem() { Text = tmp[1], Value = tmp[0], Selected = false });
}
HttpContext.Current.Cache.Add("slCountries", _countries.OrderBy(c => c.Text).ToList(), null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(24, 0, 0), System.Web.Caching.CacheItemPriority.Normal, null);
}
return _countries;
}
}
DropDownListFor
尝试自动匹配提供的枚举中接收 属性 的值。我一开始也有这个问题。
改为提供视图模型中的任何实体列表。我通常使用 IDictionary<int, string>
之类的东西。然后像这样创建下拉列表:
Html.DropDownListFor(m=>m.DestinationCountry, new SelectList(Model.Countries, "Key", "Value"))
然后 SelectList 将自动设置其 Key 与 DestinationCoutry 匹配的正确选项。