使用DropDownList时如何将SelectList绑定到Model

时间:2011-05-18 17:10:34

标签: asp.net-mvc-3

此页面分两步进行,

步骤1 - 用户点击Index(),并使用数据库中的应用程序填充SelectList。

第2步 - 他们从列表中选择一个应用程序,该应用程序将页面发回,重新加载页面并添加应用程序详细信息

错误:当我运行此操作并进入第2步时,我收到错误回复说: 具有键'ApplicationId'的ViewData项的类型为'System.Int32',但必须是'IEnumerable'类型。

这似乎是因为Model.ApplicationList现在为null,因为它在发布表单时没有绑定回模型,我可以这样做吗?

查看:

@using (Html.BeginForm())
{
    @Html.DropDownListFor(x => x.ApplicationId, Model.ApplicationList, "Select an Application" ,  new { @onchange = "this.form.submit();" })
}

型号:

public class IndexModel
{
    public int ApplicationId { get; set; }
    public List<SelectListItem> ApplicationList { get; set; }
    public string Detail { get; set}
}

控制器:

public ActionResult Index()
{
    using (var dc = new Entities())
    {
        var model = new IndexModel();

        model.ApplicationList = new List<SelectListItem>();

        var applications = dc.Applications.OrderBy(a => a.Name).ToList();

        foreach (var application in applications)
        {
            model.ApplicationList.Add(new SelectListItem
            {
                Selected = false,
                Text = application.Name,
                Value = application.Id.ToString()
            });
        }

        model.ApplicationId = 1;

        return View(model);
    }
}

[HttpPost]
public ActionResult Index(IndexModel model)
{   
    model.Detail = GetDetail(model.ApplicationId);
    return View(model);
}

1 个答案:

答案 0 :(得分:0)

我正在努力解决同样的问题。它看起来不像.net mvc3让你在没有jquery帮助的情况下做到这一点。下拉列表会在发布时将所选项目绑定到模型,但不会在组合框中将所有项目绑定到模型。每次将视图模型传递回视图时,都必须重建它。

丢失下拉列表的另一种方法是使用ajax。