0

リストを返すモデルクラスを作成し、それをビューに渡しますが、ビューが要求されたときに、モデルを何度も呼び出してからページをクラッシュさせます。これが私のコードです。asp.netMVCを初めて使用する場合に役立ちます。

モデル

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層を分けるべきという考え方です。そうは言っても、ビューではなくコントローラー アクション メソッドで DB エンティティを取得し、ViewModel パターンを使用してそれをビューに吐き出す必要があります。あなたの場合、単純なビュー モデル IEnumerable がありますが、任意のエンティティ。

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

Yout ビューでは、モデルとして IEnumerable を使用し、DB を呼び出してデータをフェッチするのではなく、ループします。

@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 に答える