将参数传递给MVC Partial View时感到困惑?

时间:2017-03-13 19:11:17

标签: c# asp.net-mvc razor asp.net-mvc-partialview

我继承了一个MVC网站,并被要求将两个页面合并为一个。由于两个视图都有自己的视图模型,我认为不是将两个虚拟机推到一起,而是可以使用部分视图来显示,在本例中,是一个名为Clock_Detail的视图中的时钟组。但是,我需要让GroupId填充Clock Group的数据。

因此,很少使用部分视图我对如何使其工作感到困惑。 我创建了一个名为ERROR 1064 (42000) at line 27: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM ( SELECT testresults.hostname AS Hostname, hostinfo.env A' at line 3 的新视图,只是从另一页复制并粘贴了一些基本代码,看看是否可以显示任何内容。

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

_ClockGroup.cshtml

这是_ClockGroup.cshtml

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

如果未指定对象作为第二个参数:

@Html.Partial("_ClockGroup")

它会自动传递ClockDetailViewModel

类型的当前模型

您的部分需要输入ClockGroupViewModel

修复将在您调用partial传递ClockGroupViewModel对象的ClockDetailViewModel属性时:

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

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