所以我有一个Html.DropDownList,我想在编辑页面上使用,以允许用户编辑不同配方成分的类别。因此,例如,如果用户想要编辑辣椒配方,则显示配方的所有不同属性,包括他们应该能够添加或删除的所有成分的列表,或者编辑其数量,名称和类别。我只想要一个下拉列表来编辑类别,因为我只希望他们能够从预先选择的类别列表中进行选择。这就是我所拥有的。
<table>
<tr>
<th></th>
</tr>
@for (int i = 0; i < @Model.Recipe.RecipeIngredients.Count; i++)
{
<tr>
<td>@Html.EditorFor(model => model.Recipe.RecipeIngredients[i].Quantity)</td>
<td>@Html.EditorFor(model => model.Recipe.RecipeIngredients[i].IngredientName)</td>
<td>@Html.DropDownList("AvailableCategories")</td>
</tr>
}
</table>
//// GET: /Recipe/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
EditViewModel vm = new EditViewModel();
vm.Recipe = Db.Recipes.Find(id);
if (vm.Recipe == null)
{
return HttpNotFound();
}
List<SelectListItem> items = new List<SelectListItem>();
foreach (var item in Db.Categories)
{
items.Add(new SelectListItem { Text = item.CategoryName, Value = item.CategoryId.ToString() });
}
vm.AvailableCategories = items;
return View(vm);
}
public class EditViewModel
{
public Recipe Recipe { get; set; }
public List<SelectListItem> AvailableCategories { get; set; }
public EditViewModel()
{
AvailableCategories = new List<SelectListItem>();
}
}
public class RecipeIngredient
{
public int IngredientId { get; set; }
public int RecipeId { get; set; }
public int CategoryId { get; set; }
public string IngredientName { get; set; }
public string Quantity { get; set; }
public int IsOnMenu { get; set; }
public bool IsOnTheDamnMenu
{
get
{
return IsOnMenu == 1;
}
set
{
IsOnMenu = value ? 1 : 0;
}
}
public virtual Recipe Recipe { get; set; }
public virtual Category Category { get; set; }
}
答案 0 :(得分:0)
我实际上刚刚发现我可以将更多属性传递给它。像
这样的东西@Html.DropDownListFor(model => model.Recipe.RecipeIngredients[i].CategoryId, new SelectList(Model.AvailableCategories, "Value", "Text", Model.Recipe.RecipeIngredients[i].CategoryId), "-Select-")
立即显示正确的类别。