0

我编写了返回列表的模型类,然后我将其传递给视图,但是当请求页面时,视图多次调用模型然后崩溃页面,这是我的代码,请帮助我我是 asp.net MVC 的新手

模型

public List<string> DoWork()
    {
        List<string> results = new List<string>();
        using (SqlConnection con = new SqlConnection(@"Connection String Here"))
        {
            con.Open();
            using (SqlCommand cmd = new SqlCommand(@"SELECT Column1 FROM Table1", con))
            {
                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        results.Add(rdr.GetString(0));
                    }
                }
            }
        }
        return results;
    }

控制器

 public ActionResult Index()
    {
        MyData data = new MyData();
        return View(data);
    }

看法

<ul>
@for (int i = 0; i <@Model.DoWork().Count; i++)
{
<li>
  @Model.DoWork()[i]
</li>
}
</ul>
4

2 回答 2

1

这个想法是DB层和View层应该分开。话虽这么说,您应该在控制器操作方法中获取数据库实体,而不是在视图中,并使用 ViewModel 模式将其吐到视图中。在您的情况下,您有一个简单的视图模型 IEnumerable,但它可以是任何实体。

public ActionResult Index()
    {
        MyData data = new MyData();
        IEnumerable<string> thelist = data.DoWork();
        return View(thelist);
    }

在你的视图中,使用 IEnumerable 作为你的模型,并循环它,而不是调用数据库来获取你的数据:

@model IEnumerable<string>
......
@foreach(string s in Model)
{
  <li>@s<li>
}
于 2012-05-15T12:08:35.897 回答
0

DoWork每次要使用结果时都在调用该方法...

将结果存储在一个变量中,然后使用它。

<ul>
@{ List<string> works = Model.DoWork(); }
@for (int i = 0; i < works.Count; i++)
{
<li>
  @works[i]
</li>
}
</ul>
于 2012-05-15T11:34:12.430 回答