C# 如何从控制器中轻松创建DropDownList
我有一个局部视图,其中包含几个看起来相同的C# 如何从控制器中轻松创建DropDownList,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,我有一个局部视图,其中包含几个看起来相同的,每个视图依次包含一个DropdownList。现在,下拉列表中的选定值通常不同。初始值列表来自一些外部源。 所以那是行不通的: public PartialViewResult GetMeals() { var meals = DataContext.GetMeals(); ViewBag.Units = new SelectList(DataContext.GetUnits,"Id","Name"); retur
,每个视图依次包含一个DropdownList。现在,下拉列表中的选定值通常不同。初始值列表来自一些外部源。
所以那是行不通的:
public PartialViewResult GetMeals()
{
var meals = DataContext.GetMeals();
ViewBag.Units = new SelectList(DataContext.GetUnits,"Id","Name");
return PartialView("_Meals", meals);
}
@foreach (var m in Meals)
{
<div>
@Html.DropDownList("Units", ViewBag.Units as List<SelectListItem>)
<dig>
public PartialViewResult getFounds()
{
var fines=DataContext.getfines();
ViewBag.Units=newselectList(DataContext.GetUnits,“Id”,“Name”);
返回PartialView(“餐”,餐);
}
@foreach(每餐中的var m)
{
@Html.DropDownList(“单位”,ViewBag.Units作为列表)
当然,我可以为每顿饭创建另一个局部视图,但我不想进入局部视图层次结构,在另一个局部视图中创建局部视图(尽管利奥·迪卡普里奥会喜欢这样)
你们能给我一个建议吗?下面是我要做的。第一件事是去掉ViewBag。然后定义一个视图模型:
public class MealViewModel
{
public string MealDescription { get; set; }
public string SelectedUnit { get; set; }
public IEnumerable<SelectListItem> Units { get; set; }
}
最后,我将为一顿饭定义一个编辑器模板:(~/Views/Shared/EditorTemplates/MealViewModel.cshtml
),它将为模型的每个元素呈现:
@model MealViewModel
<h3>@Html.DisplayFor(x => x.MealDescription)</h3>
<div>
@Html.DropDownListFor(
x => x.SelectedUnit,
new SelectList(Model.Units)
)
</div>
@model MealViewModel
@DisplayFor(x=>x.MealDescription)
@Html.DropDownListFor(
x=>x.SelectedUnit,
新选择列表(型号单位)
)
现在有更多的循环、强制转换和错误命名的输入控件。您可以获得强类型、支持Intellisense的视图,yummy:-)
现在,当您查看控制器操作时,一定有什么困扰您:域模型和视图模型之间重复的映射代码。进入的世界,您将得到非常漂亮的代码
@model IEnumerable<MealViewModel>
@Html.EditorForModel()
@model MealViewModel
<h3>@Html.DisplayFor(x => x.MealDescription)</h3>
<div>
@Html.DropDownListFor(
x => x.SelectedUnit,
new SelectList(Model.Units)
)
</div>