2014-10-07 18 views
0

我正在使用ASP.NET Forms應用程序,爲了簡單起見,我添加了模型屬性[TotalService] & [PurchasedorReinstatedService]其中我將來自另一個模型的值存儲到此屬性中以供第一個模型使用。將ASP.Net Forms標籤設置爲Model Property值?

然後,我試圖引用此Model屬性併爲其設置一個ASP標籤.Text屬性。問題是,我不斷收到NullReferenceException異常,具體爲:

An exception of type 'System.NullReferenceException' occurred in PROJECT.dll but was not handled in user code 

Additional information: Object reference not set to an instance of an object. 

這是我的自定義控制在那裏我遇到了錯誤:

using PROJECT.Models.Default; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using PROJECT.Classes; 

namespace PROJECT.CustomControls.Default 
{ 
    public partial class YearsOfService : System.Web.UI.UserControl 
    { 
     public List<Years_Of_Service> yos { get; set; } 
     public Years_Of_Service_Data yosd { get; set; } 


     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       ApplyData(); 
      } 
     } 

     private void ApplyData() 
     { 
      salaryGridView.DataSource = yos; 
      salaryGridView.DataBind(); 

      decimal totalService = 0; 
      foreach (GridViewRow row in salaryGridView.Rows) 
      { 
       totalService += Convert.ToDecimal(row.Cells[1].Text); 
      } 

      if (yosd.YearsOfService.OrderByDescending(y => y.TotalService).FirstOrDefault().ToString() != null) // NULL REFERENCE HERE 
      { 
       creditSalLabel.Text = yosd.YearsOfService.OrderByDescending(y => y.TotalService).FirstOrDefault().ToString(); 
      } 
      else 
      { 
       creditSalLabel.Text = String.Empty; 
      } 
     } 
    } 
} 

這是我Years_Of_Service型號:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace PROJECT.Models.Default 
{ 
    public class Years_Of_Service 
    { 
     public int Year { get; set; } 
     public string FiscalYear 
     { 
      get 
      { 
       return Year + "-" + (Year + 1); 
      } 
     } 
     public decimal ServiceCredited { get; set; } 
     public decimal Salary { get; set; } 
     public string CoveredEmployer { get; set; } 

     // New properties added for Label Values 
     public string TotalService { get; set; } 
     public string PurchasedorReinstatedService { get; set; } 
    } 
} 

Years_Of_Service_Data型號:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace PROJECT.Models.Default 
{ 
    public class Years_Of_Service_Data 
    { 
     public List<Years_Of_Service> YearsOfService { get; set; } 
    } 
} 

,這是代碼在我的幫助,我是從我的數據庫結果(Oracle Data Reader)到我的模型實體讀取位(我已確認的值越來越正確添加到TotalService & PurchasedorReinstatedService屬性):

  while (odr.Read()) 
      { 
       Years_Of_Service yosRecord = new Years_Of_Service(); 

       yosRecord.Year = gh.GetSafeInt(odr, 0); 
       yosRecord.ServiceCredited = gh.ConvertNullDecimal(odr.GetValue(1)); 
       yosRecord.Salary = gh.ConvertNullDecimal(odr.GetValue(2)); 
       yosRecord.CoveredEmployer = gh.GetSafeString(odr, 3); 

       // Use the Default Info Model Class - At_A_Glance Model properties to fill these properties for text labels. 
       yosRecord.TotalService = defInfoOasis.At_A_Glance.CreditTotal.ToString("N5"); 
       yosRecord.PurchasedorReinstatedService = defInfoOasis.At_A_Glance.TotalPurchase.ToString("N5"); 
       yos.Add(yosRecord); 
      } 

本來我嘗試以下,也得到FirstOrDefault()的實體,與NullReferenceException相同的結果:

creditSalLabel.Text = yosd.YearsOfService.OrderByDescending(y => y.TotalService).FirstOrDefault() != null ? yosd.YearsOfService.OrderByDescending(y => y.TotalService).FirstOrDefault().ToString() : String.Empty; 

purchaseCreditLabel.Text = yosd.YearsOfService.OrderByDescending(y => y.PurchasedorReinstatedService).FirstOrDefault() != null ? yosd.YearsOfService.OrderByDescending(y => y.PurchasedorReinstatedService).FirstOrDefault().ToString() : string.Empty; 

任何人有我如何可以設置我的任何想法屬性給我的(任何實體)模型屬性[TotalService] & [PurchasedorReinstatedService]?通過我設置屬性的方式,被引用的模型類中的每個實體對這兩個屬性都具有相同的值。

回答

1

我的猜測是您找回默認是空

yosd.YearsOfService.OrderByDescending(y => y.TotalService).FirstOrDefault() 

然後你正在做的ToString()這個空。

如果不是這樣,我會查看yosd爲null或yosd.YearsOfService爲null。

+0

看起來你是對的,我試着'ToString()''yosd'這是空的東西站。這是一個奇怪的交易,我把控件的大部分數據放在一個Grid中,還有兩個單值我試圖拉入(爲了簡單起見,只是從已經從數據庫中獲得的另一個模型中抓取)。 – 2014-10-07 21:05:55