C# 将viewModel传递给布局

C# 将viewModel传递给布局,c#,asp.net-mvc,viewmodel,C#,Asp.net Mvc,Viewmodel,我有一个viewmodel,它有一些属性和我想应用的东西 到布局页面: public class BasicViewModel { public Page Page { get; set; } public List<Settings> Settings { get; set; } } 公共类基本视图模型 { 公共页页面{get;set;} 公共列表设置{get;set;} } 从这里的其他线程中,我了解到这是可能的,但我真的不明白如何做到 据我所知,

我有一个viewmodel,它有一些属性和我想应用的东西 到布局页面:

public class BasicViewModel
{
    public Page Page { get; set; }
    public List<Settings> Settings { get; set; }      
}
公共类基本视图模型
{
公共页页面{get;set;}
公共列表设置{get;set;}
}
从这里的其他线程中,我了解到这是可能的,但我真的不明白如何做到

据我所知,我不知何故需要修改一个控制器,这就是我感到困惑的地方。我如何知道必须修改的控制器以及如何修改?
感谢您的帮助。

在控制器中,准备以下动作

public ActionResult BasicViewModelDemo
{
           BasicViewModel obj=new BasicViewModel()
           // assign properties

            return View(obj);
}
查看并编写一些jquery。(这里我使用敲除来创建视图模型)


var model='@Html.Raw(Json.Encode(model));
var viewmodel=ko.mapping.fromJSON(模型);

我的解决方案来了-

假设你有一个这样的模型-

public class BasicViewModel
{
    public Page Page { get; set; }
    public List<Settings> Settings { get; set; }
}

public class Page
{
    public string PageName { get; set; }
}

public class Settings
{
    public string SettingName { get; set; }
}
public class HomeController : Controller
{
    BasicViewModel model;
    public HomeController()
    {
        model = new BasicViewModel();
        model.Page = new Page();
        model.Settings = new List<Settings>();
    }

    public ActionResult Index()
    {
        model.Page.PageName = "My Page";
        ViewBag.LayoutModel = model;
        return View();
    }
 }
公共类基本视图模型
{
公共页页面{get;set;}
公共列表设置{get;set;}
}
公共类页面
{
公共字符串PageName{get;set;}
}
公共类设置
{
公共字符串设置名称{get;set;}
}
然后在控制器中,您应以以下方式启动模型-

public class BasicViewModel
{
    public Page Page { get; set; }
    public List<Settings> Settings { get; set; }
}

public class Page
{
    public string PageName { get; set; }
}

public class Settings
{
    public string SettingName { get; set; }
}
public class HomeController : Controller
{
    BasicViewModel model;
    public HomeController()
    {
        model = new BasicViewModel();
        model.Page = new Page();
        model.Settings = new List<Settings>();
    }

    public ActionResult Index()
    {
        model.Page.PageName = "My Page";
        ViewBag.LayoutModel = model;
        return View();
    }
 }
公共类HomeController:控制器
{
基本视图模型;
公共家庭控制器()
{
模型=新的基本视图模型();
model.Page=新页面();
model.Settings=新列表();
}
公共行动结果索引()
{
model.Page.PageName=“我的页面”;
ViewBag.LayoutModel=模型;
返回视图();
}
}
所以基本上我们使用构造函数来初始化模型,然后在控制器动作中分配适当的值

然后在布局中,我们可以使用模型属性,如下所示-

<div> @ViewBag.LayoutModel.Page.PageName </div>
@ViewBag.LayoutModel.Page.PageName

我想知道,为什么需要将viewModel传递给布局?@Satpal,因为这是使用MVVM模式所做的……在返回视图的控制器中,您必须返回viewModel,而不是“真实”模型。当然,您必须相应地编辑视图。@Satpal:Layout根本不是母版页。布局只是在视图上显示事物的方式。类LayoutRoot对应于所有其他视图的外观。@user2915962:这有一个逐步的示例,请尝试并遵循它,以了解每个对象之间的动态以及它们之间的关系,然后在项目中尝试: