1

アイテムを集めています。ここに私のビューモデルがあります:

public class MyViewModel
{
    public IEnumerable<MyClass> MyCollection { get; set; }
}

public class MyClass
{        
    public string VendorName { get; set; }
    public decimal Amount { get; set; }
    public decimal Tax { get; set; }           
}

したがって、私のコレクションには約200行あります。複数の行に同じベンダー名が含まれている可能性があるため、コレクションには 5 つの異なるベンダー名があります。

ビュー モデルを渡すビューで、各ベンダーの名前を表示し、各ベンダーの下にそのベンダー名の金額と税のグリッドを表示したいと考えています。

私の見解の範囲内でこれを行う必要があると思いますが、その方法が正確にはわかりません。

4

2 に答える 2

3

ビューモデルをビューに密接に対応させ、ビューでのデータ操作をできるだけ少なくしたいと思います。結局のところ、データを整形するのはビューの責任ではなく、データをユーザーに公開するだけです。だから私は使うだろう

public class Vendor
{
    public string VendorName { get; set; }
    public IEnumerable<VendorInfo> VendorData { get; set; }
}

public class VendorInfo
{
    public decimal Amount { get; set; }
    public decimal Tax { get; set; }
}

public class MyViewModel
{
    public IEnumerable<Vendor> Vendors { get; set; }
}

そのため、ベンダー名とその詳細から UI 要素を 1 回のパスで構築できます。

于 2013-01-07T10:32:31.743 に答える
0

2段階のプロセスを採用できます。コントローラーでこれを行います:

var vendors = MyCollection.Select(myc => myc.VendorName).Distinct();

そして、(MyCollection と共に) ベンダーをビューに渡すようにしてください (または、ビューでそれを行うこともできますが、それは個人的な好み次第です)。次に、ビューでこれを行います:

foreach(var vendor in vendors)
{
  var currentCollection = MyCollection.Select(myc => myc.VendorName.Equals(vendor));
  foreach(MyClass something in currentCollection)
  {
     //Do what you want
  }
}

ビューで (ViewBag または ViewData のいずれかによって) ベンダー リストを取得するときは、それをIEnumerable<string>(および MyCollection に) キャストして戻してIEnumerable<MyClass>ください。

于 2013-01-06T05:05:46.267 に答える