2017-05-31 103 views
0

我有2個部分視圖,每個視圖都有與之關聯的不同視圖模型。 第一部分視圖被稱爲 「AccountNamesPartial」:在部分MVC中渲染部分內容

@using GACharts.Models.IntergratedAccount; 
@model UpdateAccount 
@for (int i = 0; i < Model.Accounts.Count(); i++) 
{ 
<li> 
    <label> 
     @Html.HiddenFor(model => Model.Accounts[i].Id) 
     @Html.CheckBoxFor(model => Model.Accounts[i].Selected) 
     @Model.Accounts[i].Name 
    </label> 
</li> 
} 

所以上面的局部視圖是我在我的第二部分視圖要@ Html.RenderPartial( 「AccountNamesPartial」):

@model GACharts.Models.ReportViewModel 
<select class="form-control" id="ChartViewId" name="ChartViewId"> 
         <option>Select View</option> 
@{Html.RenderPartial("AccountNamesPartial", new GACharts.Models.IntergratedAccount.UpdateAccount());} 
</select> 

我不再出現堆棧跟蹤錯誤,但數據不會出現在第二個部分視圖中。任何想法/建議讓它工作?

+0

它看起來像你初始化UpdateAccount'的'一個新的實例,並把它傳遞給局部視圖。由於它是一個新實例,因此它不會有任何數據。 –

回答

0

渲染表單以進行更新必然會要求您獲取要更新的實際對象以獲取其數據。如果你想繼續使用諧音,這意味着你將需要有UpdateAccount視圖模型已存在於您的ReportViewModel

public class ReportViewModel 
{ 
    ... 

    public UpdateAccount UpdateAccount { get; set; } 
} 

然後,您可以填充,在你的行動返回視圖之前:

var account = // fetch, from DB, for example 
reportModel.UpdateAccount = new UpdateAccount { /* map properties over here */ }; 

然後,在你的部分:

@Html.Partial("AccountNamesPartial", Model.UpdateAccount) 

或者,你可以使用一個子操作:

[ChildActionOnly] 
public ActionResult AccountNames() 
{ 
    var account = // fetch, from DB, for example 
    var model = new UpdateAccount { /* map properties */ }; 
    return PartialView("AccountNamesPartial", model); 
} 

然後,在你的部分:

@Html.Action("AccountNames")