2017-03-16 8 views
0

ビューから編集メソッドへBullet_Pointsのリストをキャッチしようとしています。しかし、コレクションアイテムをデータベースに保存できません。私は以下で、2つのforのループを使用する必要がEdit()方法でリストコレクションをビューからコントローラメソッドに更新できません

@for (int i = 0; i < Model.Specifications.Count(); i++) 
{ 
    @Html.LabelFor(x => x.Specifications[i].Bullet_Point) 
    @Html.EditorFor(x => x.Specifications[i].Bullet_Point) 
    @Html.ValidationMessageFor(x => x.Specifications[i].Bullet_Point) 
} 

は私がBullet_PointsがDBに保存されて表示されていないフォーマットをループします。ビューからコレクションアイテムのモデル数クエリの結果をループして、DBへのビューから仕様モデルを結合し

  • セカンドforeachループを持っている

    1. まずforループ。

    の各反復では、コントローラ

    [HttpPost] 
    public ActionResult Edit(FormCollection form, ProductVm2 VM) 
    { 
        List<Specification> spec = (from sp in db.Specifications 
               where sp.Product_ID == VM.Product.ProductID 
               select sp).ToList(); 
    
        for (int i = 0; i < VM.Specifications.Count(); i++) 
        { 
         foreach (var sp in spec) { 
          sp.Bullet_Point = VM.Specifications[i].Bullet_Point; 
         } 
         db.savechanges(); 
        } 
    
  • +0

    こんにちは@GertArnold、混乱して申し訳ありません。 Specは結果のクエリの結果を保持します。SpecからのすべてのBullet_pointを繰り返し、VM.Specficiationsオブジェクトに入力値があります。 Bullet_Pointsを保存するには、両方を同時に繰り返す必要があります。 – Arun3x3

    答えて

    1

    foreachあなたはスペック `内のすべての仕様に現在の仕様VM.Specifications[i]の値を割り当てます。このコードの結果...

    for (int i = 0; i < VM.Specifications.Count(); i++) 
    { 
        foreach (var sp in spec) 
        { 
         sp.Bullet_Point = VM.Specifications[i].Bullet_Point; 
        } 
        db.savechanges(); 
    } 
    

    は... spec内のすべての仕様はVM.Specificationsの最後のBullet_Pointの価値を持っていることです。

    これはおそらく予期せぬ変更を引き起こすはずなので、私はあなたがそれらを見ない理由を理解できません。

    データベース・エンティティとビューモデルの変更を同期化するための正しい方法である:

    var pairs = from vmSpec in VM.Specifications 
          join dbSpec in spec on vmSpec.SpecificationId equals dbSpec.SpecificationId 
          select new { vmSpec, dbSpec }; 
    foreach(var pair in pairs) 
    { 
        pair.dbSpec.Bullet_Point = pair.vmSpec.Bullet_Point; 
    } 
    
    db.SaveChanges(); 
    

    このペアビューモデルとデータベース、その主キーがSpecificationIdであると仮定すると、コピーの仕様値。

    関連する問題