对将参数传递给 MVC 局部视图感到困惑?

Confused on passing parameter to MVC Partial View?

我继承了一个 MVC 站点,并被要求将两个页面合并为一个。由于两个视图都有自己的视图模型,我想与其将两个虚拟机放在一起,不如使用局部视图来显示,在本例中,时钟组显示在名为 Clock_Detail 的视图中。但是,我需要获取 GroupId 来填充时钟组的数据。

所以,由于很少使用局部视图,我对如何让它发挥作用感到困惑。 我创建了一个名为 _ClockGroup.cshtml 的新视图,并从其他页面复制并粘贴了一些基本代码,看看是否可以显示任何内容。

在我的 ClockDetail 控制器中,我添加了以下内容。

public PartialViewResult ClockGroup(int groupId)
{
    ClockGroupViewModel vm = DAL.GetClockGroupDetail(groupId);
    return PartialView(vm);
} 

这里是_ClockGroup.cshtml

@model site.Models.ViewModels.ClockGroupViewModel

<div class="form-group">
    @Html.LabelFor(m => m.GroupId, htmlAttributes: new { @class = "control-label col-md-2" })
    @Html.EditorFor(m => m.GroupId, new { htmlAttributes = new { @class = "form-control", disabled = "disabled", @readonly = "readonly" } })
</div>
<div class="form-group">
    @Html.LabelFor(m => m.GroupName, htmlAttributes: new { @class = "control-label col-md-2" })
    @Html.EditorFor(m => m.GroupName, new { htmlAttributes = new { @class = "form-control", autofocus = "autofocus" } })
    @Html.ValidationMessageFor(m => m.GroupName, "", new { @class = "text-danger" })
</div>

这是来自 clock_detail.cshtml 的观点。它使用以下模型,然后我将部分添加到此视图中。

@model site.Models.ViewModels.ClockDetailViewModel

@Html.Partial("_ClockGroup")

当然我得到一个错误,模型传递了一个字典类型“site.Models.ViewModels.ClockDetailViewModel”,但字典需要一个时间“site.Models.ViewModels.ClockGroupViewModel" 的模型项。

我是否需要继续将两个 ViewModel 组合在一起并只使用一个 ViewModel?

当你没有指定对象作为第二个参数时:

@Html.Partial("_ClockGroup")

它会自动通过ClockDetailViewModel

类型的当前模型

您的部分要求类型 ClockGroupViewModel

解决方法是当您调用局部函数以传入 ClockDetailViewModel 对象的 ClockGroupViewModel 属性 时:

@Html.Partial("_ClockGroup", Model.ClockGroupViewModelProperty)

如果您的 ClockDetailViewModel class 没有 ClockGroupViewModel 属性,您需要将其添加到您的 ViewModel 并填充数据。