C# 没有类型为“IEnumerable”且键为“ProjectBranch”的ViewData项
我试过其他答案的建议,但似乎不起作用 我的控制器里有这个C# 没有类型为“IEnumerable”且键为“ProjectBranch”的ViewData项,c#,asp.net-mvc,C#,Asp.net Mvc,我试过其他答案的建议,但似乎不起作用 我的控制器里有这个 var BranchList = new List<String>(); var BranchQry = (from p in db.Projects where p.Branch != null orderby p.Branch select new { ID = p.Id,
var BranchList = new List<String>();
var BranchQry = (from p in db.Projects
where p.Branch != null
orderby p.Branch
select new {
ID = p.Id,
Branch = p.Branch
}).Distinct().ToList();
//BranchList.AddRange(BranchQry.Distinct());
ViewBag.ProjectBranch = new SelectList(BranchQry, "ProjectBranch", "ProjectBranch");
在我看来
@if (rolelist.Contains("readwrite") && rolelist.Contains("dataadmin"))
{
<p>
@Html.DropDownList("ProjectBranch", (IEnumerable<SelectListItem>)ViewBag.ProjectBranch)
<input type="submit" value="Filter" />
</p>
}
获取错误:
没有类型为“IEnumerable”的ViewData项
具有键“ProjectBranch”
我把它改成了这个,但还是一样的错误
var BranchList = new List<String>();
var BranchQry = from p in db.Projects
where p.Branch != null
orderby p.Branch
select p.Branch;
BranchList.AddRange(BranchQry.Distinct());
ViewBag.ProjectBranch = new SelectList(BranchList, "ID", "Branch");
编辑:
在我看来
@if (rolelist.Contains("readwrite") && rolelist.Contains("dataadmin"))
{
<p>
@Html.DropDownList("ProjectBranch", (IEnumerable<SelectListItem>)ViewBag.ProjectBranchList)
<input type="submit" value="Filter" />
</p>
}
你在这里做了很多错事。修复其中任何一个都不能解决您的问题,因此您必须修复所有这些问题 第一: 这将创建一个包含两个元素的查询,ID和Branch。然后,您可以这样做:
ViewBag.ProjectBranch = new SelectList BranchQry, "ProjectBranch", "ProjectBranch");
SelectList在这里接受3个参数,第一个是IEnumerable,第二个是IEnumerable中表示SelectList值字段的属性名称,第三个是表示Text属性的属性名称。这些属性可以相同,但它们必须是IEnumerable中的有效属性。IEnumerable中没有名为ProjectBranch的属性,只有ID和Branch
您可能希望Value为ID,Branch为Text,因此应该是:
ViewBag.ProjectBranch = new SelectList(BranchQry, "ID", "Branch");
第二:
您不应将ViewBag属性名称命名为与其他属性名称相同的名称。这混淆了模型绑定器
因此,将其更改为:
ViewBag.ProjectBranchList = new SelectList(BranchQry, "ID", "Branch");
然后这样做:
@Html.DropDownList("ProjectBranch", (IEnumerable<SelectListItem>)ViewBag.ProjectBranchList)
假设您的模型具有名为ProjectBranch的属性,则不能将ViewBag属性命名为与绑定到的属性相同的名称。如果返回视图,您还需要确保再次生成SelectList。我更改了它,但仍然得到相同的错误。我正在控制器中执行查询,但我的视图有@model EHPortfolio.ViewModels。MyWork@AyoFafore-您显然没有正确地更改它,因为如果您正确地更改,我在这里所写的内容将起作用。更重要的是,如果您使用的是我上面提到的强类型版本,那么ViewData根本不应该涉及。如果错误是相同的,仍然是ProjectBranch,那么如果您将名称更改为ProjectBranchList,则错误在其他地方。我有相同的错误。我肯定我把它改成了你的@erik funkenbuschevar BranchList=新列表;var BranchQry=来自数据库项目中的p,其中p.Branch!=null orderby p.Branch选择新的{ID=p.ID,Branch=p.Branch}.Distinct.ToList//BranchList.AddRange Branchqry.Distinct;ViewBag.ProjectBranchList=新建SelectListBranchQry,ID,Branch@如果rolelist.Containsreadwrite和&rolelist.Containsdataadmin{@Html.DropDownListProjectBranch,IEnumerableViewBag.ProjectBranchList}
ViewBag.ProjectBranchList = new SelectList(BranchQry, "ID", "Branch");
@Html.DropDownList("ProjectBranch", (IEnumerable<SelectListItem>)ViewBag.ProjectBranchList)
@Html.DropDownListFor(x => x.ProjectBranch, Model.ProjectBranchList)