此页面分两步进行,
步骤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);
}
答案 0 :(得分:0)
我正在努力解决同样的问题。它看起来不像.net mvc3让你在没有jquery帮助的情况下做到这一点。下拉列表会在发布时将所选项目绑定到模型,但不会在组合框中将所有项目绑定到模型。每次将视图模型传递回视图时,都必须重建它。
丢失下拉列表的另一种方法是使用ajax。