Доступ к базе данных SQL в Razor View -> Невозможно преобразовать строку в Generic.List - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь отобразить атрибуты Lecturer, извлеченные из базы данных SQL и сохраненные в списке в моем представлении Razor, но когда оно достигает строки:

foreach (var lec in (List<LecturerModel>)ViewData["lecturers"])

Я получаю ошибку:

System.InvalidCastException: 'Невозможно привести объект типа' System.String 'к типу' System.Collections.Generic.List`1 [ADO.Models.LecturerModel] '.'

DATA

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);

}

CONTROLLER

        List<LecturerModel> Lecturers = LecturerData.GetLecturers();

        ViewData["Lecturers"] = "lecturers";


        return View();
    }

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>

1 Ответ

2 голосов
/ 09 апреля 2019

Следующий код устанавливает 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"])
...