在部分MVC中渲染部分

时间:2017-05-31 16:15:02

标签: c# asp.net-mvc model viewmodel

我有2个部分视图,每个视图都有一个与之关联的不同视图模型。 第一部分视图称为“AccountNamesPartial”:

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

我不再收到堆栈跟踪错误,但数据不会出现在第二个局部视图中。任何想法/建议让它工作?

1 个答案:

答案 0 :(得分: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")