2014-02-09 64 views
1

我有一個局部視圖:數據是NULL

@model BasicFinanceUI.Models.TransactionLine 

<div class="form-group"> 
    <label for="cmbCategory0" class="col-lg-1 control-label">Category:</label> 
    <div class="col-lg-3"> 
     @Html.DropDownListFor(x => x.CategoryId, 
            new SelectList(Model.References.Categories, "Value", "Text", Model.CategoryId), "Select one", 
            new { @onchange = "populateSubCategory(0)", @class = "cmbCategory form-control" }) 
    </div> 
</div> 

這種部分視圖是從對象的List <>裝載在我的主視圖:

@foreach (var line in Model.Transaction.TransactionLines) 
{ 
    @Html.Partial("_TransactionLine", line) 
} 

局部視圖( s)加載正確,數據正確。

但是,當我想保存數據 - 看起來我的列表有一行,但行中沒有數據。我是部分視圖的新手,但似乎MVC不會將部分視圖數據映射到創建部分視圖列表的列表<>。

我做錯了什麼?

在控制器中,當我試圖將數據讀入我的對象送他們回數據庫,我這樣做:

item.TransactionLines = new List<TransactionLineDto>(); 
foreach (var line in model.Transaction.TransactionLines) 
{ 
    item.TransactionLines.Add(new TransactionLineDto 
     { 
      Id = line.Id, 
      CostCentreId = line.CostCentreId, 
      SubCategoryId = line.SubCategoryId, 
      TransactionId = model.Transaction.Id, 
      Amount = line.Amount 
     }); 
} 

但是,我所發現的是,所有的值都是0.看起來局部視圖不會將數據返回到視圖的模型。這是預期的行爲,還是我做錯了什麼?

我試過'部分'和'渲染部分'。不知道爲什麼是正確的,因爲它們都導致同樣的問題。

回答

0

如果您檢查HTML,您將看到部分內部下拉菜單的名稱屬性將爲CategoryId。這是錯誤的,因爲它應該是Transaction.TransactionLines[0].CategoryId。否則ASP.NET MVC將無法正確地將值映射到模型。解決這個問題的最簡單的解決方案是使用for循環並在主視圖中移動部分視圖HTML。

for (int i = 0; i < model.Transaction.TransactionLines.Count; i++) 
{ 
    <div class="form-group"> 
     <label for="cmbCategory0" class="col-lg-1 control-label">Category:</label> 
     <div class="col-lg-3"> 
     @Html.DropDownListFor(x => x.Transaction.TransactionLines[i].CategoryId, 
            new SelectList(x.Transaction.TransactionLines[i].References.Categories, "Value", "Text", x.Transaction.TransactionLines[i].CategoryId), "Select one", 
            new { @onchange = "populateSubCategory(0)", @class = "cmbCategory form-control" }) 
     </div> 
    </div> 
} 
+0

謝謝。我現在就這樣做了....任何想法,如果我還可以更改'label for =「中的名稱?需要將計數器號碼附加到名稱上,所以,「cmbCategory1 ... 2,... 3 ... etc – Craig

+0

@Craig你可以試試嗎?'' –