如何在MVC中的View中显示列表?

时间:2016-08-02 08:00:03

标签: asp.net-mvc razor

好的,所以我看到了很多类似的问题,但遗憾的是我无法弄清楚如何在视图中从db访问用户列表。我得到一个System.NullReferenceException。你们其中一位专家能否看到我做错了什么?

模型

ProcessEmail

控制器

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);
}

我忘了什么?

2 个答案:

答案 0 :(得分:2)

您的问题是您正在获取用户,但您没有将用户传递给视图,而是传递空模型。

更好的方法是创建一个ViewModel,其中包含视图中所需的所有属性。

假设您的视图模型如下所示:

<强>视图模型:

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

创建ViewModel之后,您需要在Controller中创建ViewModel的实例并用数据填充它,然后将ViewModel传递给View。在你的情况下,它看起来像这样:

<强>动作:

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

稍后,如果您确定需要在视图中使用一些额外的属性,只需将它们添加到ViewModel并继续。

答案 1 :(得分:1)

通过这样的用户。您没有将用户传递给View

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>
}