Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用IEnumerable填充razor对象返回错误_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

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;