2011-07-27 164 views
2

我有一个学生数据模型(实体框架),我已经将“StudentID”和“StudentName”设置为主键。 StudentID的类型为Int,StudentName的类型为String。空引用异常错误

我创建了一个强类型的视图,但是当我运行它,我得到以下错误:

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 
Source Error: 


Line 10:   <tr> 
Line 11:    <td> 
Line 12:     <%= Html.Encode(item.StudentID) %>** 
Line 13:    </td> 
Line 14:    <td> 

这里是我的控制器操作:

public ActionResult Index() 
    { 

     ViewData.Model = student.StudentTable; 
     return View(); 
    } 

这里查看:

<%@ Page 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<Student.Models.StudentTable>>" %> 

<html> 
<head runat="server"> 
</head> 
<body> 
    <table> 

    <% foreach (var item in Model) { %> 

     <tr> 
      <td> 
       <%= Html.Encode(item.StudentID) %> 
      </td> 
      <td> 
       <%= Html.Encode(item.StudentName) %> 
      </td> 
     </tr> 

    <% } %> 

    </table> 
</body> 
</html> 
+1

你能显示你的Controller Action方法的代码吗? – brodie

+1

@brodie是的,我在 – user793468

+0

上面加了它,你能告诉我们你的看法吗? – frennky

回答

1

没有任何额外的信息,我的猜测是,itemnull。如果学生表中有每个记录单个StudentID,那么你需要简单地传递model.StudentID

控制器

public ActionResult Index() 
{  
    var model = student.StudentTable; 
    return View(model); 
} 

ASPX

<% foreach (var item in Model) { %> 

    <tr> 
     <td> 
      <%= Html.Encode(item.StudentID) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.StudentName) %> 
     </td> 
    </tr> 

<% } %> 
+0

我仍然得到相同的错误,我加了我的控制器和视图上面 – user793468

+0

放置一个断点'ViewData.Model = student.StudentTable;并检查在你的任何记录中'StudentID'是否为'null'。此外,我建议将模型传递给视图,而不是使用ViewData ...'返回视图(模型);' –

+0

是的,有一些StudentID的空值,我将其设置为身份密钥。我如何克服这一点?另外,当在视图中传递模型时,如:<%= Html.Encode(model.StudentID)%>它将如何获得StudentTable中的所有学生,是不是我需要for循环? – user793468

0

如果这是l在你得到例外的情况下,那么你的item变量必须为空。你需要仔细研究它是如何被填充的 - 如果你的模型为空,那么你应该能够在你的控制器动作上抛出一个调试器,并找出为什么这种方式不起作用。

+0

是的,就是这条线。它适用于其他行动,我通过参数 – user793468

0

可能是几件事...

你是否传递了ActionMethod的有效视图数据? 你在视图上定义了@model吗?

假设student.StudentTable是StudentID属性的单个对象,那么你需要更改您的视图代码Model.StudentID

+0

是的,我有,我加了我的控制器动作上面 – user793468

1

我怀疑项目为空,如果它是空你止跌没有进入循环。设置一个断点并检查项目,这可能不是你想象的那样。