首页 > 解决方案 > 在 Razor 视图中访问 SQL DB -> 无法将字符串转换为 Generic.List

问题描述

我正在尝试显示从 SQL 数据库检索并存储在我的 Razor 视图的列表中的 Lecturer 属性,但是当它到达该行时:

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>

标签: c#asp.netrazormodel-view-controllerhtml-helper

解决方案


以下代码设置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"])

推荐阅读