gpt4 book ai didi

c# - ASP.NET MVC Razor 将模型传递给布局

转载 作者:IT王子 更新时间:2023-10-29 03:37:42 26 4
gpt4 key购买 nike

我看到的是一个字符串布局属性。但是我怎样才能明确地将模型传递给布局呢?

最佳答案

  1. 将一个名为 MainLayoutViewModel(或其他名称)的属性添加到您的 Controller (或基本 Controller )中,使用您想要使用的任何类型。
  2. 在 Controller (或基础 Controller )的构造函数中,实例化类型并将其设置为属性。
  3. 将其设置为 ViewData 字段(或 ViewBag)
  4. 在布局页面中,将该属性转换为您的类型。

例子: Controller :

public class MyController : Controller
{
public MainLayoutViewModel MainLayoutViewModel { get; set; }

public MyController()
{
this.MainLayoutViewModel = new MainLayoutViewModel();//has property PageTitle
this.MainLayoutViewModel.PageTitle = "my title";

this.ViewData["MainLayoutViewModel"] = this.MainLayoutViewModel;
}

}

布局页面顶部示例

@{
var viewModel = (MainLayoutViewModel)ViewBag.MainLayoutViewModel;
}

现在您可以在布局页面中引用变量“viewModel”,并具有对类型化对象的完全访问权限。

我喜欢这种方法,因为它是控制布局的 Controller ,而各个页面 View 模型保持布局不可知。

MVC 核心注释


Mvc Core 似乎在第一次调用每个操作时将 ViewData/ViewBag 的内容吹走。这意味着在构造函数中分配 ViewData 不起作用。然而,起作用的是使用 IActionFilter 并在 OnActionExecuting 中执行完全相同的工作。将 MyActionFilter 放在您的 MyController 上。

public class MyActionFilter: Attribute, IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
}

public void OnActionExecuting(ActionExecutingContext context)
{
var myController= context.Controller as MyController;

if (myController!= null)
{
myController.Layout = new MainLayoutViewModel
{

};

myController.ViewBag.MainLayoutViewModel= myController.Layout;
}
}
}

关于c# - ASP.NET MVC Razor 将模型传递给布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4154407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com