ASP.NET 核心 CSHTML 视图中未为 DropDownListFor 加载当前值
Current Value not loaded for DropDownListFor in ASP.NET Core CSHTML View
我在屏幕上有一个字段,我想限制 select 可用的值,所以我使用助手从字典对象构建的下拉菜单来仅显示有效选项。
首次从数据库加载并显示选项时,代码未翻译 - 而是提示 'No Option',第一个选项,而不是记录中的选项。
一旦我 select 从下拉列表中选择一个有效选项,它就可以正常工作。该新值在更新时写入数据库。
我只是无法在初始 load/display 上获取要翻译的现有值。我想我在控制器中遗漏了一些东西来将它设置为当前值?
词典:
public static class Options
{
public const string NoOption = "*NONE";
public const string OptionOne = "OP1";
public const string OptionTwo = "OP2";
public const string OptionThree = "OP3";
public const string OptionFour = "OP4";
public static IReadOnlyDictionary<string, string> Values =>
new Dictionary<string, string>
{
{ "No Option", NoOption },
{ "Option One", OptionOne },
{ "Option Two", OptionTwo },
{ "Option Three", OptionThree },
{ "Option Four", OptionFour }
};
}
型号:
public string Option { get; set; }
public IEnumerable<SelectListItem> OptionItems => Options.Values.ToSelectListItem();
辅助扩展:
public static IEnumerable<SelectListItem> ToSelectListItem(
this IReadOnlyList<string> values) =>
from value in values
select new SelectListItem
{
Text = value.ToString(),
Value = value.ToString()
};
查看:
<div>
@Html.DropDownListFor(model => model.SelectedItem.Option, Model.SelectedItem.OptionItems, new { @id = "optionSelection" })
</div>
控制器:
public IActionResult OnGet()
{
selectedItem = itemData.GetItem(SearchTerm);
if (SelectedItem == null)
{
return RedirectToPage("./NotFound");
}
return Page();
}
你必须将字典转换为列表
var model= new Model{
OptionItems = new List<SelectListItem>();
}
foreach(var item in Options.Values) {
model.OptionItems.Add(new SelectListItem {Value= item.Key, Text = item.Value});
}
查看
<div>
@Html.DropDownListFor(model => model.SelectedItem.Option,
new SelectList(Model.SelectedItem.OptionItems), new { @id = "optionSelection" })
</div>
或者更好地制作这样的模型
public string Option { get; set; }
public SelectList OptionItems
并将所有代码移至此处
我在屏幕上有一个字段,我想限制 select 可用的值,所以我使用助手从字典对象构建的下拉菜单来仅显示有效选项。
首次从数据库加载并显示选项时,代码未翻译 - 而是提示 'No Option',第一个选项,而不是记录中的选项。
一旦我 select 从下拉列表中选择一个有效选项,它就可以正常工作。该新值在更新时写入数据库。 我只是无法在初始 load/display 上获取要翻译的现有值。我想我在控制器中遗漏了一些东西来将它设置为当前值?
词典:
public static class Options
{
public const string NoOption = "*NONE";
public const string OptionOne = "OP1";
public const string OptionTwo = "OP2";
public const string OptionThree = "OP3";
public const string OptionFour = "OP4";
public static IReadOnlyDictionary<string, string> Values =>
new Dictionary<string, string>
{
{ "No Option", NoOption },
{ "Option One", OptionOne },
{ "Option Two", OptionTwo },
{ "Option Three", OptionThree },
{ "Option Four", OptionFour }
};
}
型号:
public string Option { get; set; }
public IEnumerable<SelectListItem> OptionItems => Options.Values.ToSelectListItem();
辅助扩展:
public static IEnumerable<SelectListItem> ToSelectListItem(
this IReadOnlyList<string> values) =>
from value in values
select new SelectListItem
{
Text = value.ToString(),
Value = value.ToString()
};
查看:
<div>
@Html.DropDownListFor(model => model.SelectedItem.Option, Model.SelectedItem.OptionItems, new { @id = "optionSelection" })
</div>
控制器:
public IActionResult OnGet()
{
selectedItem = itemData.GetItem(SearchTerm);
if (SelectedItem == null)
{
return RedirectToPage("./NotFound");
}
return Page();
}
你必须将字典转换为列表
var model= new Model{
OptionItems = new List<SelectListItem>();
}
foreach(var item in Options.Values) {
model.OptionItems.Add(new SelectListItem {Value= item.Key, Text = item.Value});
}
查看
<div>
@Html.DropDownListFor(model => model.SelectedItem.Option,
new SelectList(Model.SelectedItem.OptionItems), new { @id = "optionSelection" })
</div>
或者更好地制作这样的模型
public string Option { get; set; }
public SelectList OptionItems
并将所有代码移至此处