2011-06-05 106 views
12

我有以下结构:asp.net mvc - 为什么模型为null?

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?我如何访问PageMain.cs中的数据表?我是MVC的新手,所以如果我在结构中有任何逻辑错误,请不要犹豫在警告我:)

+0

这个DataTable对于每次调用都是唯一的,还是像你需要访问的静态值? – 2011-06-05 12:14:36

+0

它的内容是根据url参数 – Shaokan 2011-06-05 12:15:35

+0

设计的,该代码属于控制器,而不是模型。 – SLaks 2011-06-05 12:24:33

回答

10

首先,您需要设置您的逻辑以从模型到达数据库。你可以使用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); 

} 

的上面的控制器正在将人员列表传递给您的视图。 MyDataEntity类是您的实体框架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> 
+0

感谢您的回答! – Shaokan 2011-06-05 13:04:39

5

您需要在控制器中创建一个模型以传递给View()

+0

啊,我想,只要我离开返回View()为空,它就会自动处理它。我想我错了。谢谢! – Shaokan 2011-06-05 12:14:51

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

是的但仍然,现在我的数据表返回null。我怎样才能从视图中使用PageMain.cs中的数据表? – Shaokan 2011-06-05 12:19:10

+0

@Shaokan,需要查看dtable getter代码才能算出来。 – 2011-06-05 12:23:01

+0

啊,没关系我已经知道了,实际上我可以得到dtable,但由于代码错误它返回null :)非常感谢! – Shaokan 2011-06-05 12:23:54

0

这发生在我身上,因为我忘记了我的表单字段的“名称”属性。 D'OH!

0

我遇到过同样的问题。我的错误是在模型中拥有同名的属性。

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

} 
相关问题