2016-08-02 53 views
0

好吧,所以我看到了很多類似的問題,但不幸的是,我無法弄清楚如何在視圖中訪問數據庫中的用戶列表。我得到一個System.NullReferenceException。你們中的一位專家能看到我做錯了什麼嗎?如何在MVC視圖中顯示列表?

型號

public class MyModel 
{ 
    [Key] 
    public int Id { get; set; } 
    [Display(Name = "Name")] 
    public string Name { get; set; } 
    public bool TriggerOnLoad { get; set; } 
    public string TriggerOnLoadMessage { get; set; } 
    public string EmployeeNumber { get; set; } 
    public IEnumerable<User> Users { get; set; } 

    public List<MyModel> GetAllUsers() 
    { 
     var queryString = "SELECT Name FROM Users"; 
     var adapter = new SqlDataAdapter(queryString, System.Configuration.ConfigurationManager.ConnectionStrings["SQLConn"].ConnectionString); 
     var current = new DataSet(); 
     adapter.Fill(current, "Name"); 

     return (from DataRow item in current.Tables[0].Rows 
       select new MyModel() 
       { 
        Name = Convert.ToString(item["Name"]), 
       }).ToList(); 

    } 

控制器

public ActionResult GetUser() 
{ 
    var model = new MyModel(); 
    _db.GetAllUsers(); 
    return View(model); 
} 

查看

@model ModelName.Models.MyModel 

--HTMLCode-- 

@foreach (var item in Model.Users) <-- Exception. 
{ 
    <tr> 
     <td>@Html.DisplayFor(modelItem => item.Name)</td> 
    </tr> 
} 

什麼我忘了?

+0

試圖在@ {}中包裝它? – MikeDub

+0

控制器代碼中的_db是什麼? – ekad

+0

@ekad它是DbContext。但這不是問題所在嗎?當我調試代碼時,我會一路看到視圖。 (sql代碼有效) –

回答

1

傳這樣的用戶。你是不是傳遞用戶查看

public ActionResult GetUser() 
{ 
    var model = new MyModel(); 
    var users = _db.GetAllUsers(); 
    return View(users); 
} 

然後在視圖

@model List<MyModel> 
@foreach (var item in Model) //foreach through the list 
{ 
    <tr> 
     <td>@Html.DisplayFor(model => item.Name)</td> 
    </tr> 
} 
2

你的問題是,你所得到的用戶,但你不及格的用戶認爲,相反,你傳遞一個空的模型。

更好的方法是在視圖中創建一個包含所需屬性的ViewModel。

比方說,您的視圖模型看起來是這樣的:

視圖模型:

class YourViewModel 
{ 
    public string Name { get; set; } 
    public bool TriggerOnLoad { get; set; } 
    public IEnumerable<User> Users { get; set; } 
} 

創建視圖模型,你需要做什麼後,你需要在創建視圖模型的實例你的控制器並填充數據,然後將ViewModel傳遞給View。在你的情況下,它會是這個樣子:

操作:

public ActionResult RandomAction() 
{ 
    YourViewModel vm = new YourViewModel() 
    { 
     Users = _db.GetAllUsers(), 
     Name = "Random Name", 
     TriggerOnLoad = true 
    }; 
    return View(vm); 
} 

後來,如果你決定你需要,你需要在你的看法與合作一些額外的屬性,你只需將它們添加到你的ViewModel並繼續。