我有一个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吗?
答案 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" />
}