好的,所以我看到了很多类似的问题,但遗憾的是我无法弄清楚如何在视图中从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);
}
我忘了什么?
答案 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>
}