C# Can';t显示来自ViewBag的数据
我的数据库中有一个表,我希望不重复地获取名称字段。 但我得到了这个错误: “字符串”不包含“ID”的定义。 当我调试代码时,我发现变量中充满了数据,直到foreach错误出现 在我的控制器中:C# Can';t显示来自ViewBag的数据,c#,asp.net,sql-server,asp.net-mvc-4,C#,Asp.net,Sql Server,Asp.net Mvc 4,我的数据库中有一个表,我希望不重复地获取名称字段。 但我得到了这个错误: “字符串”不包含“ID”的定义。 当我调试代码时,我发现变量中充满了数据,直到foreach错误出现 在我的控制器中: public ActionResult Create() { HREntities db = new HREntities(); var areas = db.Area.Select(area => area.Area + area.ID).Disti
public ActionResult Create()
{
HREntities db = new HREntities();
var areas = db.Area.Select(area => area.Area + area.ID).Distinct().ToList();
if(areas != null)
ViewBag.areas = areas;
return View();
}
视图的代码:
@foreach (var area in ViewBag.areas)
{
<div class="col-lg-4 col-md-4 col-sm-4 col-xs-12">
<input name="group4" type="radio" id="@area.ID" class="radio-col-blue-grey" />
<label for="@area.ID">@area.Area</label>
</div>
}
@foreach(ViewBag.areas中的变量区域)
{
@面积,面积
}
在控制器的创建
方法中,您正在以下行创建一个列表
:
var areas = db.Area.Select(area => area.Area + area.ID).Distinct().ToList();
然后将此列表传递给ViewBag,但由于它现在是字符串列表而不是列表
,因此它在那里没有ID属性
在调试时,检查变量区域的类型
,您将看到。foreach循环中的标记代码应如下所示:
<input name="group4" type="radio" id="@area" class="radio-col-blue-grey" />
<label for="@area">@area</label>
@区域
您的.Select()
查询返回的是IEnumerable
,而不是区域
对象的集合(并且字符串
没有名为Id
的属性)
根据您的查询,您的视图代码应该是
@foreach (var area in ViewBag.areas)
{
<div class="col-lg-4 col-md-4 col-sm-4 col-xs-12">
<input name="group4" type="radio" id="@area" class="radio-col-blue-grey" />
<label for="@area">@area</label>
</div>
}
@foreach(ViewBag.areas中的变量区域)
{
@区域
}
或者,您需要返回模型的集合侧注-很难想象将
ID
和区域
属性组合会导致重复,因此您似乎不需要使用.Distinct()
。我强烈建议您将模型传递到视图,而不是使用ViewBag
,并在视图中强烈键入模型,包括使用HtmlHelper
方法生成html。是的,我同意您的看法,我刚才所做的就是这样。谢谢你的解释