C# Can';t显示来自ViewBag的数据

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

我的数据库中有一个表,我希望不重复地获取名称字段。 但我得到了这个错误:

“字符串”不包含“ID”的定义。 当我调试代码时,我发现变量中充满了数据,直到foreach错误出现

在我的控制器中:

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。是的,我同意您的看法,我刚才所做的就是这样。谢谢你的解释