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

Javascript 在两个视图上使用局部视图,javascript,asp.net,asp.net-mvc,razor,Javascript,Asp.net,Asp.net Mvc,Razor,我有一个观点,有两种不同的观点。这两个不同的视图使用不同的网络视图模型。在其中一个视图上,代码为: 视图1: @model StudentsViewModel ...... ..... @Html.Partial("_StudentOtherInformation") 局部视图 @model StudentsViewModel @if (Model.StudentList != null) { <input type="hidden" id="firstStudent" value= "

我有一个观点,有两种不同的观点。这两个不同的视图使用不同的网络视图模型。在其中一个视图上,代码为:

视图1:

@model StudentsViewModel
......
.....
@Html.Partial("_StudentOtherInformation")
局部视图

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

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

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

视图1:

@model StudentsViewModel
......
.....
@Html.Partial("_StudentOtherInformation", model)
@model SearchViewModel
....
@Html.Partial("_StudentOtherInformation", model)
视图2:

@model StudentsViewModel
......
.....
@Html.Partial("_StudentOtherInformation", model)
@model SearchViewModel
....
@Html.Partial("_StudentOtherInformation", model)
但是,这不允许您传递两种不同的类型

您可以做的只是创建一个基类,将公共属性放在其中,然后从这个基类继承两个ViewModels。它们在不同的名称空间中是没有问题的。您只需引用正确的名称空间:

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
}
公共类ParentViewModel
{
公共列表学生列表{get;set;}
}
公共类StudentsViewModel:your.namespace.ParentViewModel
{
//这里还有其他物业吗
}
公共类SearchViewModel:your.namespace.ParentViewModel
{
//这里还有其他物业吗
}
然后,您的局部视图应强类型化为基类:

局部视图

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

那么,我应该将Parentviemodel传递给这两个视图还是它们自己的viemmodel?伙计,我遇到了一些关于如何使用接口解决此类问题的阅读资料。。。。在使用局部视图的每个viemodel上使用公共字符串getFirstStudent()。那么,有没有实现这个的想法?当然,这是同一个概念,你只需要用接口替换基类。唯一的区别是您必须在两个ViewModels上实现属性