使用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"类型。

我不确定哪里出了问题

使用IEnumerable填充剃刀对象返回错误

看看这一行。

 model.StatusList = new SelectList(pm.LoadStatus(), "ProjStatusID",   "ProjStatusCode");

但是您的pm.LoadStatus返回一个SelectListItem列表。列表中的每个项目都将具有Value属性和Text属性,不会有ProjeStatusIDProjStatusCode属性。那条线要坏了!

这应该能解决这个问题。

 model.StatusList = new SelectList(pm.LoadStatus(), "Value",   "Text");

甚至

vm.StatusList = pm.LoadStatus() as SelectList;

将控制器中的代码更改为模型StatusList=pm.LoadStatus()