我试图将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;。
的定义
如何解决这个问题?
答案 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。
答案 1 :(得分:-1)
由于您没有正确提供数据,因此调试问题非常困难。
但您可以尝试从@foreach
-
@foreach (var item in Model.Foo.Foo1)
{
@Html.DisplayFor(modelItem=> item.fooName)
}
并检查你正在迭代的所有项目,也许你错过了一些值,或者这可能是一个拼写错误