2011-06-05 32 views
12

que tienen la siguiente estructura:asp.net mvc: ¿por qué el modelo es nulo?

Controller.cs

public ActionResult PageMain(string param) 
{ 
    return View(); 
} 

PageMain.cs

namespace project1.Models 
{ 
    public class PageMain 
    { 
     public DataTable dtable 
     { 
      get { 
         // some code that returns a DataTable 
      } 
     } 
    } 
} 

y, finalmente, en la vista:

@using project1.Models 
@model PageMain 

var datatable = Model.dtable // but this is throwing an error since the model is null 

¿alguien sabe por qué mi modelo está volviendo nulo? ¿Cómo puedo acceder a la tabla de datos en PageMain.cs? Soy nuevo en MVC, así que si tengo algún error lógico en la estructura, no dude en avisarme :)

+0

¿Será esta DataTable única por llamada, o es algo así como un valor estático al que debe tener acceso? –

+0

su contenido está diseñado de acuerdo con el parámetro url – Shaokan

+0

BTW, ese código pertenece al controlador, no al modelo. – SLaks

Respuesta

10

En primer lugar, debe establecer su lógica para llegar a la base de datos desde su modelo. Podría usar ORM para lograr eso.

Luego, pase su modelo para verlo desde su controlador. Suponga que tiene su modelo de persona, como a continuación:

public class Person { 

    public string Name {get;set;} 
    public string SurName {get;set;} 
    public int Age {get;set;} 

} 

Con el fin de visualizar los datos específicos Person, necesita consultar su modelo y pasar este modelo desde su controlador a la vista:

public ActionResult Index() { 

    var _entities = new MyDataEntity(); 
    var model = _entities.Person; 
    model = model.Where(x => x.Age > 20); 

    return View(model); 

} 

El arriba el controlador está pasando Lista de Persona a su vista. La clase MyDataEntity es la clase de marco de entidad DataContext.

Después de eso, debe poner @model IEnumerable<Person> dentro de su modelo. Aquí hay un ejemplo:

@model IEnumerable<MyApp.Models.Person> 

<ul> 
@foreach(var item in Model){ 

    <li>Name : @item.Name</li> 
    <li>Surname : @item.Surname</li> 
    <li>Age : @item.Age</li> 

} 

</ul> 
+0

¡Gracias por la respuesta! – Shaokan

5

Necesita crear un modelo en su controlador para pasar al View().

+0

ahh, pensé que cada vez que dejo el retorno View() vacío, lo estaba manejando automáticamente. Creo que estaba equivocado. ¡Gracias! – Shaokan

3
public ActionResult PageMain(string param) 
{ 
    return View(new PageMain()); 
} 
+0

sí, pero aún así, ahora mi datatable devuelve null. ¿Cómo puedo usar la tabla de datos en PageMain.cs desde la vista? – Shaokan

+0

@Shaokan, necesitaría ver el código getter dtable para resolverlo. –

+0

ahh, está bien, lo he descubierto, en realidad puedo obtener la tabla pero regresaba nula debido a un error de código :) ¡Muchas gracias! – Shaokan

0

Esto me pasó porque olvidé el atributo "nombre" para mis campos de formulario. D'OH!

0

He tenido el mismo problema. Mi error fue tener una propiedad con el mismo nombre dentro del modelo.

public class CustomerAddress : BaseEntity 
{ 
    public long CustomerId { get; set; } 


    public string NameSurname { get; set; } 

    public string Region { get; set; } 

    public string City { get; set; } 

    public string Address { get; set; } 

    public string ZipCode { get; set; } 
} 

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult Add(CustomerAddress address){ 

} 

Reparar es para reemplazar los conflictos de nombres.

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult Add(CustomerAddress model){ 

} 
Cuestiones relacionadas