@ Html.DropDownList或@ Html.DropdownlistFor不显示当前值

时间:2014-11-10 00:43:30

标签: c# html asp.net .net

所以我有一个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; }
}

1 个答案:

答案 0 :(得分:0)

我实际上刚刚发现我可以将更多属性传递给它。像

这样的东西
@Html.DropDownListFor(model => model.Recipe.RecipeIngredients[i].CategoryId, new SelectList(Model.AvailableCategories, "Value", "Text", Model.Recipe.RecipeIngredients[i].CategoryId),  "-Select-")

立即显示正确的类别。