如何在asp.net mvc视图中显示数据库记录

Posted

技术标签:

【中文标题】如何在asp.net mvc视图中显示数据库记录【英文标题】:How to display database records in asp.net mvc view 【发布时间】:2014-10-06 10:08:18 【问题描述】:

在 C# 中使用 ASP.NET MVC,如何将一些数据库记录传递给 View 并以表格形式显示?

我需要知道如何从已返回到 SqlDataReader 对象的数据库中传输/传递一些记录行并将该对象传递给视图,以便我可以在视图中显示该对象包含的所有记录foreach。

以下代码是我正在尝试做的。但它不起作用。

控制器:

public ActionResult Students()

    String connectionString = "<THE CONNECTION STRING HERE>";
    String sql = "SELECT * FROM students";
    SqlCommand cmd = new SqlCommand(sql, connectionString);

    using(SqlConnection connectionString = new SqlConnection(connectionString))
    
        connectionString.Open();
        SqlDataReader rdr = cmd.ExecuteReader();
    

    ViewData.Add("students", rdr);

    return View();

观点:

<h1>Student</h1>

<table>
    <!-- How do I display the records here? -->
</table>

【问题讨论】:

这行不通 - 设计很糟糕 - 在连接处理 (using clausule) 后,您无法从 SqlDataReader 获取数据。你读过一些 MVC / Razor 教程吗? 是的,我知道它的结构不好。这就是为什么我需要从你们有经验的人那里知道来分享你们所知道的最好的方法。 :) 我刚开始使用 C# 的 ASP.NET MVC 谢谢詹尼斯!来自 (***.com/users/2401981/giannis-paraskevopoulos) 您的回答有效,我相信这是解决我的案件的最佳方式。 我还从 DotFunda.com 找到了这个链接,它解决了我的问题,与 Gianinis 所说的解决方案相同:dotfunda.com/articles/show/2550/… 【参考方案1】:

1.首先创建一个Model 来保存记录的值。例如:

public class Student

    public string FirstName get;set;
    public string LastName get;set;
    public string Class get;set;
    ....

2。然后将阅读器中的行加载到列表或其他内容中:

public ActionResult Students()

    String connectionString = "<THE CONNECTION STRING HERE>";
    String sql = "SELECT * FROM students";
    SqlCommand cmd = new SqlCommand(sql, conn);

    var model = new List<Student>();
    using(SqlConnection conn = new SqlConnection(connectionString))
    
        conn.Open();
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read())
        
            var student = new Student();
            student.FirstName = rdr["FirstName"];
            student.LastName = rdr["LastName"];
            student.Class = rdr["Class"];
            ....

            model.Add(student);
        

    

    return View(model);

3。最后在您的View 中声明您的模型类型:

@model List<Student>

<h1>Student</h1>

<table>
    <tr>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Class</th>
    </tr>
    @foreach(var student in Model)
    
    <tr>
        <td>@student.FirstName</td>  
        <td>@student.LastName</td>  
        <td>@student.Class</td>  
    </tr>
    
</table>

【讨论】:

非常感谢这真的很有帮助。我什至学会了如何使用模型! 我很高兴这对您有所帮助。您不妨接受它作为未来读者的答案,如果您愿意,也可以投票。 哦,是的。我现在还不能投票。但是,当我在 SOF 有足够的声誉时,我会这样做。谢谢!【参考方案2】:

如果你不用sql阅读器,拥有这样的Controller会不会更容易。

Controller.cs

private ConnectContext db = new ConnectContext();

public ActionResult Index()
   
     return View(db.Tv.ToList());
   

ConnectContext.cs

public class ConnectContext : DbContext

    public DbSet<Student> Student get; set; 

这样您的连接字符串将在您的 web.config 中,并且视图 + 模型将保持不变。

【讨论】:

以上是关于如何在asp.net mvc视图中显示数据库记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ASP.NET MVC 视图显示存储在数据库中的 HTML?

asp.net MVC列表视图中未显示图像

如何在 ASP.NET MVC 视图中显示 2 个列表

ASP.NET MVC / C#:如何显示属于另一个控制器的部分视图数据

如何在 ASP.Net MVC 中将列表对象显示到视图中?

如何在 ASP.NET MVC 中控制局部视图的条件显示