MVCではTupleを用いて匿名クラスデータストレージを完了

2833 ワード

MVCを使用すると、ControllerからViewに転送されるデータはいくつかのテーブルのいくつかのフィールドのデータにすぎず、これらのフィールドを匿名クラスにしてViewに転送できるかどうかを考えている人が多いようですが、これは通用しないようです.そのため、これらのフィールドに対してModelを作成し、データの正確な転送を容易にすることがあります.しかし、Modelはますます多くなり、多くの人がそうするのが好きではありません.他の方法はありませんか?
ここでは、次の方法を紹介します.
System.Tupleを使用して実装されます.このクラスは静的なクラスで、メタグループオブジェクトを作成するための静的な方法を提供しています.これは多くありません.メタデータを自分で見ることができます.簡単です.
次に使い方を見てみましょう.
Controllerコード:
public ActionResult TupleTest()
        {
            LinqDBEntities db = new LinqDBEntities();
            dynamic data = db.StuInfo.ToList().Select(s => Tuple.Create(s.StuNum, s.StuName, s.StuAge,s.StuSex, s.ClassID));
            ViewData["data"] = data;
            return View();
        }

転送するデータをControllerでTuple.Createでカプセル化する
Viewコード:
<%
            dynamic dd = ViewData["data"];
            foreach (var item in dd)
            {                
                Response.Write(item.Item1+"-"+item.Item2+"-"+item.Item3+"-"+item.Item4+"-"+item.Item5+"<br>");
            }   
         %>

Viewではパッケージされたデータを入手できます.
注意:Tuple.Createは最大8つのパラメータをサポートしますが、フィールドが8つ以上ある場合があります.Tupleネストを使用することができます.たとえば、次のようにします.
Tuple.Create(s.StuNum, s.StuName, s.StuAge,s.StuSex, s.ClassID,s.StuNum,Tuple.Create(s.StuName,s.StuAge))
ただし、ネストするとコードの解像度が低下するので、フィールドが多すぎる場合は、専用のModelクラスの作成を検討することをお勧めします.