2014-02-21 56 views
2

我想解決這個問題,但因爲我學習了很多這些東西,所以我會很感激,如果有人能夠解釋我要去哪裏錯了, /或者我可以閱讀的一些很好的資源。MVC查看模型引發的NullReferenceException

因此,我有一個基於我的數據庫的實體框架模型和表示該模型中屬性的視圖模型的模型。我已經構建了一個Kendo網格來顯示數據(在js文件中定義),並且控制器中的方法返回一個Json結果集。麻煩的是,當我嘗試在連接數據庫表中顯示一個值時,如果沒有設置鍵值,我會收到nullreferenceexception錯誤。顯然,我錯過了這個難題的一部分,因爲必須有一種編碼方式來阻止它發生。任何幫助將感激地收到!

我的模式是這樣的:

namespace TrainingKendoUI.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class TRAINING_EMPLOYEE_COURSES 
    { 
     public int EMP_COURSE_ID { get; set; } 
     public int EMPLOYEE_ID { get; set; } 
     public int COURSE_ID { get; set; } 
     public Nullable<System.DateTime> DATE_ATTENDED { get; set; } 
     public Nullable<decimal> COURSE_COST { get; set; } 
     public string COURSE_RESITS { get; set; } 
     public Nullable<int> PROVIDER_ID { get; set; } 
     public Nullable<int> EMP_COURSE_STATUS_ID { get; set; } 
     public Nullable<int> VENUE_ID { get; set; } 

     public virtual TRAINING_COURSES TRAINING_COURSES { get; set; } 
     public virtual TRAINING_EMPLOYEE_COURSE_STATUS TRAINING_EMPLOYEE_COURSE_STATUS { get; set; } 
     public virtual TRAINING_EMPLOYEES TRAINING_EMPLOYEES { get; set; } 
     public virtual TRAINING_PROVIDERS TRAINING_PROVIDERS { get; set; } 
     public virtual TRAINING_VENUES TRAINING_VENUES { get; set; } 
    } 
} 

我控制器的方法是這樣的:

public JsonResult EmployeeCourses_Read() 
    { 
     var model = db.TRAINING_EMPLOYEE_COURSES; 
     var ViewModel = new List<EmployeeCoursesIntersectionViewModel>(); 

     foreach (var employee in model) 
     { 
      ViewModel.Add(new EmployeeCoursesIntersectionViewModel(employee)); 
     } 

     return Json(ViewModel, JsonRequestBehavior.AllowGet); 
    } 

和我的觀點lilke這種模式:

namespace TrainingKendoUI.ViewModels 
{ 
    public class EmployeeCoursesIntersectionViewModel 
    { 

     #region Constructors 

      public EmployeeCoursesIntersectionViewModel() 
      { 

      } 

      public EmployeeCoursesIntersectionViewModel(TRAINING_EMPLOYEE_COURSES model) 
      { 
       this.empCourseId = model.EMP_COURSE_ID; 
       this.employee = model.TRAINING_EMPLOYEES.FIRST_NAME; 
       this.course = model.TRAINING_COURSES.COURSE_NAME; 
       this.dateAttended = model.DATE_ATTENDED; 
       this.cost = model.COURSE_COST; 
       this.resits = model.COURSE_RESITS; 
       //These lines will produce a NullReference error if not set through the front end... 
       this.provider = model.TRAINING_PROVIDERS.PROVIDER_NAME; 
       this.status = model.TRAINING_EMPLOYEE_COURSE_STATUS.EMP_COURSE_STATUS; 
       this.venue = model.TRAINING_VENUES.VENUE_NAME; 

     } 

     #endregion 

     #region Properties 

     public int empCourseId { get; set; } 
     public string employee { get; set; } 
     public string course { get; set; } 
     public Nullable<System.DateTime> dateAttended { get; set; } 
     public Nullable<decimal> cost { get; set; } 
     public string resits { get; set; } 
     public string provider { get; set; } 
     public string status { get; set; } 
     public string venue { get; set; } 

     #endregion 

    } 
} 

回答

1

上做一個空檢查設置它之前的對象,即

this.provider = model.TRAINING_PROVIDERS == null ? "" 
         : model.TRAINING_PROVIDERS.PROVIDER_NAME; 

,你就必須做的地位和地點

this.status = model.TRAINING_EMPLOYEE_COURSE_STATUS== null ? "" 
         model.TRAINING_EMPLOYEE_COURSE_STATUS.EMP_COURSE_STATUS; 
this.venue = model.TRAINING_VENUES== null ? "" 
         model.TRAINING_VENUES.VENUE_NAME; 
相似