gpt4 book ai didi

c# - 在 Controller 中设置布局

转载 作者:行者123 更新时间:2023-11-30 12:41:25 24 4
gpt4 key购买 nike

在以前版本的 MVC 中,我能够使用 View() method 在 Controller 中设置布局。 .

public class MyController
{
public ActionResult Test1()
{
return View("Test", "Layout1");
}
public ActionResult Test2()
{
return View("Test", "Layout2");
}
}

然而,在 documentation 中似乎没有将 Layout/Template/Masterpage 作为参数的 View 重载。

将逻辑添加到我的所有模型或 View 对于这种逻辑来说确实是一个糟糕的选择,那么在 Controller 方法中是否有替代方法?

Asp.Net MVC 6/核心 Controller Source Code .

最佳答案

感觉很脏,但我做到了:

没有魔法弦(理论):

public enum ViewDataType
{
Layout = 0
}

查看数据扩展

public static class ViewDataExtensions
{
public static void Add(this ViewDataDictionary viewData, ViewDataType viewDataType, object value)
{
viewData.Add(viewDataType.ToString(), value);
}

public static TResult Get<TResult>(this ViewDataDictionary viewData, ViewDataType viewDataType)
where TResult : class
{
var result = viewData[viewData.ToString()] as TResult;

return result;
}
}

Controller 扩展:

public static class ControllerExtensions
{
public static IActionResult View(this Controller instance, object model, string layout)
{
instance.ViewData.Add(ViewDataType.Layout, layout);
return instance.View(model);
}

public static IActionResult View(this Controller instance, string viewName, object model, string layout)
{
instance.ViewData.Add(ViewDataType.Layout, layout);
return instance.View(viewName, model);
}
}

用法:

public IActionResult Index()
{
// blah blah logic

var result = this.View("ViewName", model, "Layouts/Default");
}

在 ViewStart 中:

var layout = this.ViewData.Get<string>(ViewDataType.Layout)
if (string.IsNullOrEmpty(layout))
{
Layout = "Layouts/Default";
}
else
{
Layout = layout;
}

关于c# - 在 Controller 中设置布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37424614/

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