在两个视图上使用局部视图

时间:2013-05-15 08:16:26

标签: javascript asp.net asp.net-mvc razor

我有一个Partialview,它有两个不同的视图。两个不同的视图使用不同的视图模型。在其中一个视图中,代码是:

厂景:

@model StudentsViewModel
......
.....
@Html.Partial("_StudentOtherInformation")

PartialView

@model StudentsViewModel
@if (Model.StudentList != null)
{
<input type="hidden" id="firstStudent" value= "@Model.StudentList.ElementAt(k-1).StudentID" />
}

视图2:

@model SearchViewModel
....
@Html.Partial("_StudentOtherInformation")

从上面的代码中,部分视图需要访问view1的viewmodel。我得到例外,说partialview与viewmodel混淆了。我做了一些研究,发现一方面是创建一个包含两个viewmodel的parentviewmodel。但问题是这两个模型在不同的名称空间中。有什么办法可以将每个视图中的相应视图模型传递给partialview吗?

1 个答案:

答案 0 :(得分:1)

您可以将ViewModel作为第二个参数传递:

<强>厂景:

@model StudentsViewModel
......
.....
@Html.Partial("_StudentOtherInformation", model)

<强>视图2:

@model SearchViewModel
....
@Html.Partial("_StudentOtherInformation", model)

但是,这不允许您传递两种不同的类型。

你可以做的只是创建一个基类,将公共属性放在那里,并从这个基类继承你的两个ViewModel。它们在不同的命名空间中没有问题。您只需要引用正确的命名空间:

public class ParentViewModel
{
    public List<Student> StudentList{ get; set; }
}

public class StudentsViewModel : your.namespace.ParentViewModel
{
     // other properties here
}

public class SearchViewModel: your.namespace.ParentViewModel
{
     // other properties here
}

然后,您的部分视图应该强类型为基类:

<强> PartialView

@model ParentViewModel
@if (Model.StudentList != null)
{
<input type="hidden" id="firstStudent" value= "@Model.StudentList.ElementAt(k-1).StudentID" />
}