c# - 在 Controller 中设置布局

标签 c# layout asp.net-core-mvc

在以前版本的 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/

相关文章:

c# - 比较不同类型的装箱值

c# - .net 4 xslt 转换扩展功能损坏

android - 获取布局宽度并在 onGlobalLayoutListener 中设置新的宽度值

c# - ValidateAntiForgeryToken 是否使用 POST 自动实现?

asp.net-core-mvc - 将 MediaType 添加到现有的 JsonInputFormatter

c# - 如何修复 "Referenced assembly does not have a strong name"错误

C#preg_replace?

android - 如何获取部分布局在另一个布局下

CSS 布局工具包

c# - 如何调试 ASP.NET Core MVC 数据绑定(bind)?