返回列表查看

时间:2016-08-27 12:02:32

标签: c# asp.net-mvc loops viewbag

每次我循环浏览视图时都会出现此错误

  

object'不包含'Name'的定义

这是我的行动

public ActionResult AssignTask() 
{
    var List = db.Employees.Select(x => new 
    { 
        id = x.id, 
        Name = x.Name
    }).ToList();

    ViewBag.Emp_data = List;

    return View();
}

这是我的看法 enter image description here

2 个答案:

答案 0 :(得分:4)

此代码返回List<anonymous>

var List = db.Employees.Select(x => new 
{ 
    id = x.id, 
    Name = x.Name
}).ToList();

因此,您无法在视图的Name循环中访问foreach属性。

我建议使用强类型的ViewModel类来保存数据并避免使用ViewBag。 ViewModel应位于Models文件夹中,如下所示

public class EmployeeViewModel
{
    public int ID { get; set; }
    public string Name { get; set; }
}

按以下方式更改您的控制器

public ActionResult AssignTask() 
{
    var model = db.Employees.Select(x => new EmployeeViewModel
    { 
        ID = x.id, 
        Name = x.Name
    }).ToList();

    return View(model);
}

并在您的视图中

@model List<EmployeeViewModel>

<h2>AssignTask</h2>
<div class="row">
    <div class="form-group">
        <div style="overflow-y:scroll; overflow-x:hidden; height:400px;">
            @foreach (var item in Model)
            {
                <div class="col-lg-4 col-md-4">
                    <label>@item.Name</label>
                    <input type="checkbox" class="checkbox" name="SelectEmp" value="@item.ID" />
                </div>
            }
        </div>
    </div>
</div>

答案 1 :(得分:2)

您使用的是视图不了解的匿名类型。 您仍应在选择中使用Employee课程:

    var List = db.Employees.Select(x => new Employee
    { 
        id=x.id,
        Name=x.Name
    }).ToList();

顺便说一句,您应该使用View Model而不是viewbag来传输数据。