2017-08-23 41 views
0

兩個星期前我發佈了一個類似的問題,但有問題讓它調試成功。感謝@Stephen Muecke幫助我排除故障。我正在重新發布,因爲我沒有對下面概述的問題的後半部分產生任何影響。插入一個字符串值到視圖模型列表

基於membertype處理顯示公司列表的網站功能,但我遇到了如何在C#中構建列表的問題。當我測試代碼時,出現未處理的異常錯誤,調試表明列表爲空。

這裏是視圖模型:

public class MemberListViewModel 
{ 
    public List<string> MemberList { get; set; } 
    public string MemberType { get; set; } 
} 

這裏是控制器代碼:

public class MemberListController : Controller 
{ 
public ActionResult MemberList() 
{ 
    return PartialView(PrepareMemberListViewModel()); 
} 

private MemberListViewModel PrepareMemberListViewModel() 
{ 
    MemberListViewModel viewModel = new MemberListViewModel(); 

    string orgType = "Distributor"; //TODO: hardcoded for dev 

    DataTable table = new DataTable(); 

    using (var connection = new SqlConnection("Provider=SQLOLEDB;Data Source=db.site.net;Persist Security Info=True;Initial Catalog=DB;User ID=SA;Password=PW")) 
    { 
     connection.Open(); 
if (orgType == "Manufacturer") 
     { 
      using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = 'Manufacturer' and [Member Code] <> 'Associate - HBW'", connection)) 
       table.Load(command.ExecuteReader()); 
     } 
     else if (orgType == "HBW") 
     { 
      using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = 'Manufacturer' and [Member Code] = 'Associate - HBW'", connection)) 
       table.Load(command.ExecuteReader()); 
     } 
     else 
     { 
      using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = '" + orgType + "'", connection)) 
       table.Load(command.ExecuteReader()); 
     } 
connection.Close(); 
    } 

    for (int i = 0; i < table.Rows.Count; i++) 
     { 
      string memberName = table.Rows[i]["Member"].ToString(); 
      viewModel.MemberList.Add(memberName); 
     } 

    return viewModel; 
} 
} 

當我調試,一切運行順利,直到我們到達

viewModel.MemberList.Add(memberName); 

在該行,viewModel.Memberlist的本地值固執地保持爲null。我已經確認該表具有值 - 在本例中爲35行,並帶有公司名稱。

我知道我錯過了一些簡單的東西,但是我是一個noob,所以不知道它是什麼。提前致謝!

+1

您從未實例化過您的列表。 – Fran

+0

實例化您的MemberList – Atul

+0

在類的構造函數中實例化列表屬性是一種很好的做法,因此您永遠不會訪問空列表。 – Fran

回答

2

您在NULL上致電Add方法,因此獲得典型的空引用異常。

請確保您在調用任何方法/訪問它之前將其初始化爲空集合。

var viewModel = new MemberListViewModel(); 
viewModel.MemberList= new List<string>(); 

或使用對象初始化語法

var viewModel = new MemberListViewModel 
        { 
         MemberList= new List<string>() 
        }; 

恕我直言,收集類型屬性不應該是零,如果沒有數據,它應該是一個空列表。所以解決你的問題的另一種方法是更新你的類定義,使其具有一個將此屬性初始化爲空列表的構造函數。

public class MemberListViewModel 
{ 
    public List<string> MemberList { get; set; } 
    public string MemberType { get; set; } 

    public MemberListViewModel() 
    { 
     this.MemberList = new List<string>(); 
    } 
} 
+0

我知道這會變得簡單......謝謝你,@Shyju,謝謝你的解釋。我同意你對你的第三條建議的推理,所以就跟着那個前傳的作品。再次感謝! – chipsterva69

相關問題