将ViewBag数据绑定到HTML表

时间:2017-11-03 17:48:21

标签: c# html razor viewbag

我试图将View Bag数据绑定到HTML表格。我的C#代码工作正常。可以将数据作为ViewBag.employeeData = getDBData();添加到View Bag,但是当我尝试访问每个项目时,

  

抛出Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。

下面给出了 C#代码

   private IEnumerable<Employees> getDBData()
    {
        SqlConnection con = null;
        Employees empData;
        string sqlConn = ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString;
        try
        {
            using (con = new SqlConnection(sqlConn))
            {
                SqlCommand command = new SqlCommand("SELECT ID,FirstName,LastName,Gender,Salary FROM Employees", con);
                con.Open();
                SqlDataReader read = command.ExecuteReader();
                List<Employees> empDetails = new List<Employees>();
                while (read.Read())
                {
                    empData = new Employees();
                    empData.ID = Convert.ToInt32(read["ID"]);
                    empData.FirstName = Convert.ToString(read["FirstName"]);
                    empData.LastName = Convert.ToString(read["LastName"]);
                    empData.Gender = Convert.ToString(read["Gender"]);
                    empData.Salary = Convert.ToInt32(read["Salary"]);
                    empDetails.Add(empData);
                }
                return empDetails;
            }
        }
        catch (Exception)
        { return null; }
        finally { con.Dispose(); }
    }

剃刀

        <table class="table table-striped table-condensed">
        <thead>
            <tr>
                <th>ID</th>
                <th>FirstName</th>
                <th>LastName</th>
                <th>Gender</th>
                <th>Salary</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in ViewBag.employeeData)
            {
                <tr>
                    <td>@item.ID</td>
                    <td>@item.FirstName</td>
                    <td>@item.LastName</td>
                    <td>@item.Gender</td>
                    <td>@item.Salary</td>
                </tr>
            }
        </tbody>
    </table>

例外:

  

&#39;对象&#39;不包含&#39; ID&#39;。

的定义

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您不需要使用ViewBag(我建议不要使用它)。从控制器返回值时:

return empDetails;

它成为视图模型。在视图中,您需要声明模型类型:

@model List<Employees>

然后你可以:

@foreach (var item in Model)
{
  <tr>
    <td>@item.ID</td>
    <td>@item.FirstName</td>
    <td>@item.LastName</td>
    <td>@item.Gender</td>
    <td>@item.Salary</td>
  </tr>
}
  

razor如何知道保存从控制器类返回的List。

这是的设计惯例。 Dynamic v. Strongly Typed Views

答案 1 :(得分:-1)

由于您没有正确提供数据,因此调试问题非常困难。 但您可以尝试从@foreach -

获取数据
@foreach (var item in Model.Foo.Foo1)
{
    @Html.DisplayFor(modelItem=> item.fooName)
}

并检查你正在迭代的所有项目,也许你错过了一些值,或者这可能是一个拼写错误