2016-08-02 22 views
0

よく似たような質問がたくさんありましたが、不幸にもビューのdbからユーザーのリストにアクセスする方法がわかりません。私は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

このようなユーザーを渡します。代わりに、あなたは合格、あなたは

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

あなたの問題は、ユーザーを取得しているということであるビューで次に

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

を表示するために、ユーザーを渡していませんが、あなたはビューにユーザーを渡していません空のモデル。

より良いアプローチは、ビューに必要なすべてのプロパティを持つViewModelを作成することです。

のは、あなたのビューモデルは、このようなものに見えるとしましょう:

のViewModel:あなたが何をする必要があるか、あなたのViewModelを作成した後

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

はあなたがビューモデルのインスタンスを作成する必要があるということですあなたのコントローラとデータを入力し、ViewModelをビューに渡します。あなたのケースでは、このようになります:

処置:後で

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

、あなたがあなたのビューで作業する必要があるいくつかの余分な性質を必要とするあなたが決める場合、あなただけに追加しますあなたのViewModelと続きます。

関連する問題