Я пытаюсь отобразить атрибуты лектора, полученные из базы данных SQL и сохраненные в списке в моем представлении Razor, но когда он достигает строки:
foreach (var lec in (List<LecturerModel>)ViewData["lecturers"])
Я получаю сообщение об ошибке:
System.InvalidCastException: 'Unable to cast object of type 'System.String' to type '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"]
работать.
@Рахул только что упомянул в комментариях, что есть разница в корпусе:
В приведенном выше коде вы присваиваете значение ViewData["Lecturers"]
, но затем пытаетесь прочитать из ViewData["lecturers"]
(обратите внимание на первую букву L). Они должны быть одинаковыми. Вы должны изменить другой фрагмент кода на верхний регистр L
, чтобы он соответствовал:
foreach (var lec in (List<LecturerModel>)ViewData["Lecturers"])
Я не могу редактировать ваш ответ, но это должно быть (List<LecturerModel>)ViewData["Lecturers"]
@Rahul Я не заметил разницы в корпусе OP. Ты прав.
ViewData["Lecturers"] = "lecturers";
<-- вы присваиваете строковый литералViewData["Lecturers"]
. В другом вашем коде вы пытаетесь привести это кList<LecturerModel>
- очевидно, что это невозможно.