2017-03-13 41 views
0

我继承了一个MVC网站,并被要求将两个页面合并为一个。由于两个视图都有自己的视图模型,我想不是将两个虚拟机放在一起,而是使用局部视图来显示,在这种情况下,视图中的时钟组称为Clock_Detail。但是,我需要让GroupId填充时钟组的数据。将参数传递给MVC部分视图时感到困惑?

因此,已经很少使用局部视图我如何得到这个工作困惑。 我创建了一个新的查看名为_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"的典范项目。

我需要继续前进,两者的ViewModels结合在了一起,只使用单一的视图模型?

+0

通过你在你的谐音编写代码的方式,你应该看看使用[模板代替](http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor- templates.html)。模板是有利的,因为它们读得更好,并且调用它们的约定使它们更容易诊断。我很少使用偏分量。 –

+0

我会看看模板。如果它有助于代码的可维护性,我总是会尝试一些东西。 – Caverman

回答

1

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

@Html.Partial("_ClockGroup") 

它会自动将当前的模型,它的类型是ClockDetailViewModel

你的部分都需要键入ClockGroupViewModel

的解决将是当你调用部分在ClockDetailViewModel对象的ClockGroupViewModel属性来传递:

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

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

+0

我看过哪里没有通过模型会通过当前模型,并认为这是问题的一部分。但是,我无法弄清楚如何将ClockGroupViewModel传递给partial。我的ClockDetailViewModel没有ClockGroupViewModel属性。我想我需要看看我需要做些什么才能完成。谢谢... – Caverman

+0

我觉得它在数据库访问上是双重倾斜的,但至少看起来这样可以工作,而不必重新编写一堆代码。 – Caverman

+0

...我以为我们在这里讨论视图模型?视图模型只是视图依赖的数据的容器。您的视图模型应该很少是数据库模型的1到1表示形式。 – maccettura