我理解C#MVC ASP.NET的方式是我有多个子页面用于不同的数据。
例如,
为此,我将有3个型号,Home,Car和AboutMe以及3个控制器。
如果我想拥有一个单页网站,您可以从上到下滚动,该怎么办? 我如何用MVC实现这一目标? 我只会制作1个控制器吗?如果是这样,我如何从Controller输出我需要的3个模型?
答案 0 :(得分:3)
您可以拥有一个表示Model的父对象,它将包含第1,2,3页的对象,在视图中,您只需在标准引用前加上父对象实例的名称,就可以引用模型中的字段。 你还需要1个控制器。
public class PageModel // parent model
{
// page models
public HomeModel HomeModel {get; set;}
public CarModel CarModel {get; set;}
public AboutMeModel AboutMeModel {get; set;}
}
答案 1 :(得分:2)
有不同的解决方案。基本上,MVC也适用于单页面应用程序或登录页面。
但现在关于视图模型的问题。你可以创建一个"聚合"包含所有三个模型的模型:
public class MainViewModel
{
public HomeModel HomeModel {get; set;}
public CarModel CarModel {get; set;}
public AboutMeModel AboutMeModel {get; set;}
}
作为第二个解决方案:您还可以将这些模型添加到控制器操作中的ViewBag
并在视图上访问它们(然后您不需要MainViewModel)。
public ActionResult Index()
{
ViewBag.HomeModel = new HomeModel();
ViewBag.CarModel = new CarModel();
ViewBag.AboutMeModel = new AboutMeModel();
return View();
}
答案 2 :(得分:1)
这可以在MVC中以多种不同的方式完成。 您可以访问:link
您可以使用包含HOme,Car,AboutMe数据的单个ViewModel 您也可以使用部分视图 在这里,我将使用一种Viewmodel方法向您解释。
在ViewModel中:
public class SingleViewModel
{
public List<Home> ListHome {get; set;}
public List<Car> ListCar {get; set;}
public List<AboutMe> ListAboutMe {get; set;}
}
在控制器中:
public ActionResult Index()
{
//you need to populate your viewmodel with data from database
SingleViewModel model=new SingleViewModel();
model.ListHome=GetHomeData().ToList();
model.ListCar=GetCarData().ToList();
model.AboutMe=GetAboutMeData().ToList();
//pass your model to view
return View(model);
}
在视图中
@model <Proj.Model.SingleViewModel>
// 现在,您可以在此处填充模型中的数据 //