Acceder a ViewData en una vista Razor

publicado por: Anonymous

Estoy haciendo una lista de estudiantes para mostrarla en una vista Razor mediante ViewData.

controlador

using ViewData.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ViewBag.Controllers
{
    public class StudentController : Controller
    {
        // GET: Student        
        public ActionResult Index()
        {
            IList<Student> studentList = new List<Student>();
            studentList.Add(new Student() { StudentName = "Bill" });
            studentList.Add(new Student() { StudentName = "Steve" });
            studentList.Add(new Student() { StudentName = "Ram" });

            ViewData["students"] = studentList;
            return View();
        }
    }
}

Clase estudiante

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ViewData.Models
{
    public class Student
    {
        public int StudentID { get; set; }
        public string StudentName { get; set; }
        public int Age { get; set; }
    }
}

vista

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>students</title>
</head>
<body>
    <div>
        <ul>
            @foreach (var std in ViewData["students"] as IList<Student>)
            {
                <li>
                    @std.StudentName
                </li>
            }
        </ul>

    </div>
</body>
</html>

en la vista quiero recorrer la vista pero me indica que en @foreach (var std in ViewData["students"] as IList<Student>) Student no me lo está reconociendo. Que puede ser?

solución

El problema es que no tienes una referencia al namespace de la clase Student.

Tienes dos opciones:

  • Añadir una directiva using en la vista:

    @using ViewData.Models

  • Añadir el namespace ViewData.Models en el web.config como namespace a incluir en las vistas Razor:

_x000D_

_x000D_

    <system.web.webPages.razor>_x000D_
      <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />_x000D_
      <pages pageBaseType="System.Web.Mvc.WebViewPage">_x000D_
        <namespaces>_x000D_
          ....._x000D_
          <add namespace="MVC_CSharp.Models"/>_x000D_
        </namespaces>_x000D_
      </pages>_x000D_
    </system.web.webPages.razor>

_x000D_

_x000D_

_x000D_

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *