如何在包含该下拉列表项的同时将下拉列表与模型属性绑定?

时间:2014-02-06 11:52:54

标签: asp.net-mvc-4

我遇到了问题,我已经检索了视图包中的下拉列表的所有值,并希望在运行时显示它们。我通过使用控制器的以下代码来实现它

    [HttpGet]
    public ActionResult Index()
    {
        var categoryList = new PersonalApp();
        SelectList catList = new SelectList(categoryList.GetAffinity().ToList(), "ClientName", "AffinityNum");
        ViewBag.categoryList = catList;
        return View();
    }

以及视图的以下代码

@using (Html.BeginForm("index", "Home"))
{
@Html.DropDownList("categoryList", "Branch Type")
}

它确实有效,但现在我想将它与模型绑定。我已经使用了以下代码:

 @Html.DropDownListFor(model=>model.AffinityNum, "categoryList", "BranchType")

但它给了我一个错误,因为CategoryList不能用作上述代码的参数。我将如何解决这个问题,因为我可以在类别列表中获得下拉列表的所有值,并且我也可以将它与模型属性affinityNum绑定在一​​起。

谢谢

2 个答案:

答案 0 :(得分:2)

您的模型应具有IEnumerable<SelectListItem>属性,该属性将包含值:

public class PersonalApp
{
    public string AffinityNum { get; set; }
    public IEnumerable<SelectListItem> CategoryList { get; set; }
}

您将在控制器操作中填充并传递给视图:

[HttpGet]
public ActionResult Index()
{
    var model = new PersonalApp();
    var categories = categoryList.GetAffinity().ToList();
    SelectList catList = new SelectList(categories, "ClientName", "AffinityNum");
    model.CategoryList = catList;
    return View(model);
}

最后在强类型视图中,您将使用此属性将下拉列表绑定到:

@model PersonalApp
...
@Html.DropDownListFor(x => x.AffinityNum, Model.CategoryList, "BranchType")

答案 1 :(得分:0)

请尝试; @ Html.DropDownListFor(model =&gt; model.AffinityNum,(SelectList)ViewBag.categoryList)