2017-03-16 55 views
0

我想從視圖到編輯方法捕獲Bullet_Points的列表。但是我無法將收集項目保存到數據庫。無法更新列表集合從視圖到控制器方法

@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) 
} 

Edit()方法,我需要用兩個for循環,下面循環格式我沒有看到Bullet_Points被保存到數據庫中。

  1. 首先for環路從視野中的藏品元模型計數
  2. foreach循環,通過查詢結果循環,並結合從查看到數據庫的規格型號。

控制器

[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和Input中的所有Bullet_points值,這些值位於VM.Specficiations Object中。我必須同時迭代他們兩個來保存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規格有最後Bullet_PointVM.Specifications值。

雖然這可能會發生意想不到的變化,所以我不明白你爲什麼看不到它們。

同步與數據庫實體的視圖模型的變化正確的方法是:

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,並複製值規格。

相關問題