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, поэтому, если у меня есть логическая ошибка в структуре, пожалуйста, не стесняйтесь предупреждать меня:)
Ответы
Ответ 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){
}