Подтвердить что ты не робот

Asp.net mvc - почему модель равна нулю?

У меня есть следующая структура:

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

и, наконец, в представлении:

@using project1.Models
@model PageMain

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

Кто-нибудь знает, почему моя модель возвращает null? Как я могу получить доступ к datatable в файле PageMain.cs? Я новичок в MVC, поэтому, если у меня есть логическая ошибка в структуре, пожалуйста, не стесняйтесь предупреждать меня:)

4b9b3361

Ответ 1

Во-первых, вам нужно настроить свою логику для доступа к базе данных в вашей модели. Вы можете использовать ORM для достижения этого.

Затем передайте свою модель для просмотра с вашего контроллера. Предположим, что у вас есть модель вашего человека, как показано ниже:

public class Person {

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

}

Чтобы просмотреть конкретные данные Person, вам необходимо запросить свою модель и передать эту модель с вашего контроллера на ваш взгляд:

public ActionResult Index() {

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

  return View(model);

}

Вышеуказанный контроллер передает List of Person вашему представлению. MyDataEntity class - это класс вашей сущности DataContext.

После этого вам нужно поместить @model IEnumerable<Person> внутри вашей модели. Вот пример:

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

Ответ 2

Вам нужно создать модель в контроллере, чтобы перейти к View().

Ответ 3

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

Ответ 4

Это произошло со мной, потому что я забыл атрибут "name" для полей формы. D'OH!

Ответ 5

У меня возникла такая же проблема. Моя ошибка имела свойство с таким же именем внутри модели.

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){

}

Исправление - это замена конфликтов имен.

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

}