对将参数传递给 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 并填充数据。
我继承了一个 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 并填充数据。