无法显示来自 ViewBag 的数据

Can't display data from the ViewBag

我的数据库中有一个table,我想获取不重复的名称字段。 但是我得到这个错误:

'string' 不包含 '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>
}

在控制器的 Create 方法中,您正在以下行创建 List<string>

var areas = db.Area.Select(area => area.Area + area.ID).Distinct().ToList();

然后将此列表传递给 ViewBag,但由于它现在是字符串列表而不是 List<Area>,因此它不会有 ID 属性。

在调试时,检查变量的类型areas,您就会看到。 foreach 循环中的标记代码应如下所示:

<input name="group4" type="radio" id="@area" class="radio-col-blue-grey" />
<label for="@area">@area</label>

您的 .Select() 查询是 returning IEnumerable<string>,而不是 Area 对象的集合(并且 string 没有 属性 名为 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>
}

或者您需要return您的模型集合