问题描述
我收到此错误
无法将System.Collections.Generic.List隐式转换为System.Collections.Generic.IEnumerable
当尝试使用列表在使用C#Razor构建的页面中扩展@Html.DropDownList()
时。
有一个名为SubProgram.cs
的C#类,该类使用以下方法返回List<>
:
public List<SubProgram> SubProgramCodeDescriptionList()
{
List<SubProgram> SubPrograms = new List<SubProgram>();
// Get the list of SubPrograms for this AcctIII role_code from BudgetAcct3ToSubProgram table
using (var db = Database.Open("dbnAME"))
{
string sql = @"
SELECT l.SubProgramID,l.SubProgram + ' ' + l.SubProgramDesc AS SubProgramDesc
FROM BARF_SubPrograms l
WHERE l.Deleted = 0
ORDER BY l.SubProgramDesc";
var ListSubPrograms = db.Query(sql);
foreach (var SubProgram in ListSubPrograms)
{
SubProgram item = new SubProgram ();
item.SubProgramID = SubProgram.SubProgramID;
item.SubProgramCodeDescr = SubProgram.SubProgramDesc;
SubPrograms.Add(item);
}
db.Close();
return SubPrograms;
}
}
这里是SubProgram
类,该方法是其中的一部分:
public class SubProgram
{
private int subprogramid;
private string subprogramcode;
private string subprogramcodedescr;
public int SubProgramID
{
get { return subprogramid; }
set { subprogramid = value; }
}
public string SubProgramCode
{
get { return subprogramcode; }
set { subprogramcode = value; }
}
public string SubProgramCodeDescr
{
get { return subprogramcodedescr; }
set { subprogramcodedescr = value; }
}
}
在Razor页面的C#部分中,我创建一个类型为SubProgram
的对象来填充SubProgramList
:
// Create List Boxes variable need for this add
List<SubProgram> SubProgramIDdropdownlist = new List<SubProgram>();
// Create SubProgram object so the method can be called
SubProgram subProgram = new SubProgram();
// Pass object to method SubProgramIDdropdownlist to return all of the SubPrograms
SubProgramIDdropdownlist = subProgram.SubProgramCodeDescriptionList();
在上面的C#Razor部分下面的HTML页面的body部分中,我尝试使用上面的代码填充DropDownList:
<label class="FieldLabels">"Search SubPrograms"</label>
@Html.DropDownList("SubProgramCodes",SubProgramIDdropdownlist,new {
@id = "Column1",@class = "EditTextBox",}
)
在最后一部分中,错误发生在SubProgramIDdropdownlist上,这是我得到错误的地方
无法将System.Collections.Generic.List隐式转换为System.Collections.Generic.IEnumerable
还有其他相关文章,但不是来自类方法。请帮忙,我知道这可能需要使用强制转换,但是甚至不确定从哪里开始正确进行强制转换。
解决方法
我可以想到的两种方法:
-
在剃须刀页面上使用AsEnumerable
@Html.DropDownList("SubProgramCodes",SubProgramIDdropdownlist.AsEnumarable(),new { @id = "Column1",@class = "EditTextBox"})
OR
-
将返回类型从
List<SubProgram>
更改为IEnumerable<SubProgram>
public IEnumerable<SubProgram> SubProgramCodeDescriptionList(){...}
感谢tontonsevilla,您的回答对解决这一问题很有帮助。
我想出的最终解决方案是两个名称空间中都包含SelectListItem的两个名称空间之间存在冲突:System.Web.Mvc和System.Web.WebPages.Html。 由于我主要在此项目中使用Razor页面而不是MVC,因此我删除了Razor C#页面顶部的@using System.Web.Mvc,因为该错误明确表明在System.Web.Mvc和在System.Web.WebPages.Html中,我显然需要使用其中一个,但不能同时使用。我能够强制转换它们以使其正常工作,但是当我意识到这是名称冲突时,就不需要很多额外的代码。 使用这两个名称空间会在这两个名称空间之间产生冲突,因为SelectListItem似乎同时在两个名称空间中。