我在网上浏览了无数示例,这些示例填充了选择列表甚至html下拉列表,但似乎没有任何效果。
我的cshtml.cs类中的代码
proc sql;
create table COUNTS AS
select distinct COUNT.APP_ID AS COUNT
,CATS(MONTH(APP.SUBMITTEDON),'/',YEAR(APP.SUBMITTEDON)) AS MONTH_YEAR
from APP
GROUP BY MONTH_YEAR;
cshtml类中的代码
public DutyWeb_DEVContext db;
public AddApplicationModel(DutyWeb_DEVContext db) => this.db = db;
public List<SelectListItem> ministryItems {get;set;}
public void OnGet()
{
ministryItems = db.Ministry.Select(x=>new SelectListItem{Value=x.Name,Text=x.Name}).ToList();
Console.WriteLine("------------"+ministryItems.Count);
}
我不断收到错误
Pages \ AddApplication.cshtml(14,63):错误CS0266:无法将类型'System.Collections.Generic.List'隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(您是否缺少演员表?)
部级
<input type="text" name="appName" placeholder="Enter Application Name">
<select asp-items="Model.ministryItems">
<option>Select Ministry</option>
</select>
答案 0 :(得分:1)
您正在将System.Web.Mvc和Microsoft.AspNetCore.Mvc.Rendering用于selectList和不同类型的项目
答案 1 :(得分:0)
问题出现在asp-items
助手中。它需要一个IEnumerable<SelectListItem>
作为参数。即使您在模型中将属性定义为IEnumerable<>
,但使用ToList()
,您分配给ministryItems
的集合仍然是List<>
,这会导致异常。要绕过它,你应该做
ministryItems = db.Ministry.Select(x=>new SelectListItem{Value=x.Name,Text=x.Name}).ToList() as IEnumerable<SelectListItem>;
我个人更喜欢直接在Razor页面中定义一个SelectList。
在控制器中,我们拥有
ministryItems = db.Ministry.ToList();
并采用Razor布局
<select asp-items="@new SelectList(Model.ministryItems, nameof(Ministry.Name), nameof(Ministry.Name))">
<option>Select Ministry</option>
</select>
但这实际上是一个品味问题。