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

C# 将参数传递给MVC局部视图时感到困惑?,c#,asp.net-mvc,razor,asp.net-mvc-partialview,C#,Asp.net Mvc,Razor,Asp.net Mvc Partialview,我继承了一个MVC站点,并被要求将两个页面合并为一个页面。因为两个视图都有自己的视图模型,所以我认为我可以使用局部视图来显示一个名为Clock_Detail的视图中的时钟组,而不是将两个VM推到一起。但是,我需要获取GroupId来填充时钟组的数据 所以,由于很少使用局部视图,我对如何使其工作感到困惑。 我创建了一个名为_ClockGroup.cshtml的新视图,只是从另一个页面复制并粘贴了一些基本代码,看看是否可以显示任何内容 在我的ClockDetail控制器中,我添加了以下内容 publ

我继承了一个MVC站点,并被要求将两个页面合并为一个页面。因为两个视图都有自己的视图模型,所以我认为我可以使用局部视图来显示一个名为Clock_Detail的视图中的时钟组,而不是将两个VM推到一起。但是,我需要获取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>
当然,我会得到一个错误,即模型传递了字典类型“site.Models.ViewModels.ClockDetailViewModel”,但字典需要一个时间项“site.Models.ViewModels.ClockGroupViewModel”


如果不将对象指定为第二个参数,我是否需要继续将两个ViewModel组合在一起,只使用单个ViewModel?

@Html.Partial("_ClockGroup")
它会自动传递类型为ClockDetailViewModel的当前模型

您的分部需要类型ClockGroupViewModel

当您调用partial以传入ClockDetailViewModel对象的ClockGroupViewModel属性时,会出现以下问题:


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

通过在部分中编写代码的方式,您可能应该考虑使用。模板是有利的,因为它们读起来更好,而且调用它们的约定使它们更容易r进行诊断。我很少使用partials。我会看看模板。如果它有助于代码的可维护性,我总是乐于尝试一些东西。我阅读了不传递模型会传递当前模型的地方,并认为这是问题的一部分。但是,我不知道如何将ClockGroupViewModel传递给partial。我的ClockDetailViewModel没有ClockGroupViewModel属性。我想我需要研究一下我需要做些什么来完成这项工作。谢谢…我觉得它在数据库访问上是双重的,但至少看起来它不需要重新编写一堆代码就可以工作了…我以为我们在这里讨论的是视图模型?视图模型只是视图所依赖的数据容器。视图模型很少应该是数据库模型的1对1表示形式。我正在使用VM,但我将ClockGroupVM作为属性添加到了ClockDetailVM。ClockGroupVM有自己的DB调用来获取详细信息,然后ClockGroup再次调用DB来填充它。同样,这不是什么大问题现在还没有,但我必须看看是否可以在一次调用中获得所有数据。它可以工作,并且使我不必显著地重新编写VM和页面,这就是我一直在寻找的。
@Html.Partial("_ClockGroup")
@Html.Partial("_ClockGroup", Model.ClockGroupViewModelProperty)