cze*_*uya 14 c# asp.net-mvc asp.net-mvc-3
我正在使用C#和MVC3.
我有一个页面,例如学生列表,显示学生列表,这是由数据库驱动的.同时我的菜单是数据库驱动的,所以我也必须将它发送到视图.
如何将两个模型发送到单个视图?
nee*_*ebz 14
您应始终为视图创建单独的ViewModel.您的视图应该从您的域模型中抽象出来.在演示/教程中,他们通过简单地强烈键入视图到域模型来显示它非常简单,但这不是一个好策略.视图不应该依赖于业务对象.
即使需要将域模型映射到另一个视图模型类,您也应该为当前场景以及所有其他视图实现David Glenn提出的解决方案.
编辑:
如果你让我们说一个顶级菜单> TopMenu.aspx
你内部有多个局部视图> StudentMenu.ascx,ResultMenu.ascx
您将创建顶级菜单视图模型> TopMenuViewModel.cs
,你也将创建局部视图视图模型> StudentMenuViewModel,ResultMenuViewModel等等.
并且您的TopMenuViewModel将具有两个>
class TopMenuViewModel
{
//all the stuff required in TopMenu.aspx
StudentMenuViewModel studentvm;
ResultMenuViewModel resultvm;
}
Run Code Online (Sandbox Code Playgroud)
在TopMenu.aspx渲染局部时,您将传递相关的视图模型>
Html.RenderPartial('StudentView', Model.studentvm)
希望它有意义
Dav*_*enn 10
您可以创建一个ViewModel,它代表您的视图,而不是您的业务模型
public class StudentPage {
public IEnumerable<Student> Students { get; set; }
public Menu Menu { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,您的控制器将ViewModel返回到您的视图
public ViewResult Students() {
var menu = GetMenu();
var students = Repository.Students();
var model = new StudentPage {
Menu = menu,
Students = students
}
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
我假设菜单是你网页上的一个重复出现的功能,所以你可能想要分解它
public class BasePage {
public Menu Menu { get; set; }
}
public class StudentPage : BasePage {
public IEnumerable<Student> Students { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您还可以创建一个基本控制器,它具有GetMenu()跨多个控制器重用的功能.
| 归档时间: |
|
| 查看次数: |
44364 次 |
| 最近记录: |