Comment renvoyer uniquement les 5 premiers dans une vue avec un @Foreach dans ma page d'index. Tout ce que je peux trouver utilise @foreach (var item in Model.Take(3)). Mais cela ne fonctionne pas.

Voici le code avec lequel je travaille:

Manette:

public ActionResult Index()
{
    dynamic model = new ExpandoObject();
    model.Employee = GetEmployeeInfo();
    return View(model);
}

private static List<Employee> GetEmployeeInfo()
{
    List<Employee> EmployeeInfo = new List<Employee>();
    string query = "SELECT ID, FirstName + ' ' + LastName Employee, PhoneExt FROM Employees WHERE NOT PhoneExt IS NULL ORDER BY FirstName ASC";
    string constr = ConfigurationManager.ConnectionStrings["Conn"].ConnectionString;

    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand(query))
        {
            cmd.Connection = con;
            con.Open();

            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    EmployeeInfo.Add(new Employee
                    {
                        ID = Convert.ToInt32(sdr["ID"]),
                        FirstName = sdr["Employee"].ToString(),
                        PhoneExt = Convert.ToInt32(sdr["PhoneExt"])
                    });
                }
            }

            con.Close();
            return EmployeeInfo;
        }
    }
}

Vue:

@foreach (Employee EmployeeInfo in Model.Employee)
{
    <tr>
        <td>
            <b> @Html.ActionLink(EmployeeInfo.FirstName, "Details", "Employees", new { id = EmployeeInfo.ID }, null)</b>
        </td>
        <td style="vertical-align:top">@EmployeeInfo.PhoneExt</td>
    </tr>
}
0
ksrc101 28 août 2020 à 18:52

2 réponses

Meilleure réponse

L'utilisation de Take (5) avec un modèle dynamique vous donnera probablement une exception Runtime Binder.
Idéalement, modifiez votre requête d'origine pour ne renvoyer que 5 lignes. Sinon, vous devez mapper vos résultats avec la liste des classes d'employés, comme ci-dessous:

public ActionResult Index()
{
    List<Employee> model = GetEmployeeInfo();
    return View(model);
}

Puis modélisez ceci dans votre vue, puis vous pouvez utiliser Take (5)

@model List<Employee>
@foreach (Employee EmployeeInfo in Model.Take(5))
{
    <tr>
        <td>
            <b> @Html.ActionLink(EmployeeInfo.FirstName, "Details", "Employees", new { id = EmployeeInfo.ID }, null)</b>
        </td>
        <td style="vertical-align:top">@EmployeeInfo.PhoneExt</td>
    </tr>
}
1
Munesh Kumar 28 août 2020 à 16:34

Que diriez-vous de changer votre requête pour prendre 5:

 string query = "SELECT TOP(5) ID, FirstName + ' ' + LastName Employee, PhoneExt FROM Employees WHERE NOT PhoneExt IS NULL ORDER BY FirstName ASC";
2
Umang 28 août 2020 à 16:17