单页网站的C#MVC?

时间:2015-08-04 09:04:12

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我理解C#MVC ASP.NET的方式是我有多个子页面用于不同的数据。

例如,

  • mysite.com/Home
  • mysite.com/Car
  • mysite.com/AboutMe

为此,我将有3个型号,Home,Car和AboutMe以及3个控制器。

如果我想拥有一个单页网站,您可以从上到下滚动,该怎么办? 我如何用MVC实现这一目标? 我只会制作1个控制器吗?如果是这样,我如何从Controller输出我需要的3个模型?

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>

// 现在,您可以在此处填充模型中的数据 //