C# 使用IEnumerable填充razor对象返回错误
我的模型中有以下代码:C# 使用IEnumerable填充razor对象返回错误,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我的模型中有以下代码: public class ProjectViewModel { [Display(Name = "Project Status")] public int SelectedStatusId { get; set; } public SelectList StatusList { get; set; } } 以下是从数据库检索状态集的类(位于存储库文件夹中): public IEnumerable<SelectList
public class ProjectViewModel
{
[Display(Name = "Project Status")]
public int SelectedStatusId { get; set; }
public SelectList StatusList { get; set; }
}
以下是从数据库检索状态集的类(位于存储库文件夹中):
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");
}
}
最后,还有一种观点:
@Html.LabelFor(model => model.SelectedStatusId)
@Html.DropDownListFor(model => model.SelectedStatusId, Model.StatusList,"Select Status")
我已参考了StackOverflow上的和。但是我犯了个错误
具有键“SelectedStatusId”的ViewData项的类型为“System.Int32”,但必须为“IEnumerable”
我不知道我哪里出了问题,看看这行
model.StatusList = new SelectList(pm.LoadStatus(), "ProjStatusID", "ProjStatusCode");
但是您的pm.LoadStatus返回一个SelectListItem
列表。列表中的每个项目都将具有值
属性和文本
属性,不会有ProjeStatusID
和ProjStatusCode
属性。那条线快断了
这应该可以解决这个问题
model.StatusList = new SelectList(pm.LoadStatus(), "Value", "Text");
甚至
vm.StatusList = pm.LoadStatus() as SelectList;
将控制器中的代码更改为下面的代码
model.StatusList=pm.LoadStatus()除了dupe之外,将属性更改为
public IEnumerable StatusList{get;set;}
-您可以在LoadStatus
方法中创建一个IEnumerable
。然后使用returnnewselectlist(statList,“Value”,“Text”)从中创建另一个相同的列表代码>。然后,再次使用model.StatusList=new SelectList(…)
在LoadProjectStatus()
中创建第三个相同的。谢谢。它成功了。
vm.StatusList = pm.LoadStatus() as SelectList;