web-dev-qa-db-fra.com

Comment afficher les enregistrements de base de données dans la vue mvc asp.net

En utilisant ASP.NET MVC avec C #, comment passez-vous certains enregistrements de base de données à une vue et les affichez sous forme de tableau?

J'ai besoin de savoir comment transférer/transmettre des lignes d'enregistrements d'une base de données qui ont été renvoyées à un objet SqlDataReader et transmettre cet objet à la vue afin de pouvoir afficher tous les enregistrements contenus par l'objet dans la vue à l'aide de foreach.

Le code suivant est ce que j'essaie de faire. Mais ça ne marche pas.

Le controlle:

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

La vue:

<h1>Student</h1>

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

1. Créez d'abord un Model qui contiendra les valeurs de l'enregistrement. Par exemple:

public class Student
{
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public string Class {get;set;}
    ....
}

2. Ensuite, chargez les lignes de votre lecteur dans une liste ou quelque chose:

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

. Enfin dans votre View, déclarez le type de votre modèle:

@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>
46

Si vous n'avez pas besoin d'utiliser un lecteur sql, ne serait-il pas plus facile d'avoir un contrôleur comme celui-ci.

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

De cette façon, votre chaîne de connexion sera dans votre web.config et le View + Model restera le même.

4
niko619