我试图显示从SQL数据库检索到的Lecturer属性,并存储在我的Razor视图的List上,但是当它到达该行时:
foreach (var lec in (List<LecturerModel>)ViewData["lecturers"])
我收到错误:
System.InvalidCastException:'无法将类型为'System.String'的对象强制转换为'System.Collections.Generic.List`1 [ADO.Models.LecturerModel]''。
List<LecturerModel> Lecturers = new List<LecturerModel>();
string query = "SELECT * FROM Lecturer";
SqlCommand cmd = new SqlCommand(query, connection);
SqlDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
LecturerModel lecturer = new LecturerModel()
{
LecturerId = (int)rd["Id"],
FirstName = (string)rd["FirstName"],
LastName = (string)rd["LastName"],
PracticeId = (int)rd["PracticeId"],
SessionId = null
};
Lecturers.Add(lecturer);
}
List<LecturerModel> Lecturers = LecturerData.GetLecturers();
ViewData["Lecturers"] = "lecturers";
return View();
}
@model ADO.Models.LecturerModel
@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
<table>
@{
foreach (var lec in (List<LecturerModel>)ViewData["lecturers"])
{
<tr>
<td>@lec.FirstName</td>
<td>@lec.LastName</td>
<td>@lec.Username</td>
</tr>
}
}
</table>
以下代码将ViewData["Lecturers"]
设置为字符串文字“讲师”:
List<LecturerModel> Lecturers = LecturerData.GetLecturers();
ViewData["Lecturers"] = "lecturers";
也许你想把List<LecturerModel>
分配给它?:
List<LecturerModel> Lecturers = LecturerData.GetLecturers();
ViewData["Lecturers"] = Lecturers;
这应该使(List<LecturerModel>)ViewData["lecturers"]
工作。
@Rahul刚刚在评论中提到存在套管差异:
在上面的代码中,您为ViewData["Lecturers"]
分配了一个值,但是您尝试从ViewData["lecturers"]
读取(注意第一个L)。这些必须是相同的。您应该将您的另一段代码更改为大写的L
以匹配:
foreach (var lec in (List<LecturerModel>)ViewData["Lecturers"])