使用IEnumerable填充剃刀对象返回错误
本文关键字:返回 错误 对象 剃刀 IEnumerable 填充 使用 | 更新日期: 2023-09-27 17:57:26
我的模型中有以下代码:
public class ProjectViewModel
{
[Display(Name = "Project Status")]
public int SelectedStatusId { get; set; }
public SelectList StatusList { get; set; }
}
以下是从数据库检索状态集的类(位于Repository文件夹中):
public IEnumerable<SelectListItem> LoadStatus()
{
using (ProjectEntities proj = new ProjectEntities())
{
var statList = proj.ProjectStatus.Select(x => new SelectListItem
{
Value = x.ProjStatusID.ToString(),
Text = x.ProjStatusCode
});
return new SelectList(statList, "Value", "Text");
}
}
以下是我在控制器上的代码:
public class ProjectMasterController : Controller
{
public ActionResult LoadProjectStatus()
{
ProjectDataManager pm = new ProjectDataManager();
var model = new ProjectViewModel();
model.StatusList = new SelectList(pm.LoadStatus(), "ProjStatusID", "ProjStatusCode");
return View(model);
}
}
最后,观点:
@Html.LabelFor(model => model.SelectedStatusId)
@Html.DropDownListFor(model => model.SelectedStatusId, Model.StatusList,"Select Status")
我已经参考了StackOverflow上的答案1和答案2。但我遇到了一个错误,
具有键"SelectedStatusId"的ViewData项的类型为"System.Int32",但必须为"IEnumerable"类型。
我不确定哪里出了问题
看看这一行。
model.StatusList = new SelectList(pm.LoadStatus(), "ProjStatusID", "ProjStatusCode");
但是您的pm.LoadStatus返回一个SelectListItem
列表。列表中的每个项目都将具有Value
属性和Text
属性,不会有ProjeStatusID
和ProjStatusCode
属性。那条线要坏了!
这应该能解决这个问题。
model.StatusList = new SelectList(pm.LoadStatus(), "Value", "Text");
甚至
vm.StatusList = pm.LoadStatus() as SelectList;
将控制器中的代码更改为模型StatusList=pm.LoadStatus()