2017-05-31 53 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")