Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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”且键为“ProjectBranch”的ViewData项_C#_Asp.net Mvc - Fatal编程技术网

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)