ASP.Net MVC中错误视图的动态布局

Gho*_*ngi 2 razor asp.net-mvc-3

我有两个叫做"a"和"b"的动作.我也有两种观点.这些观点的布局是不同的.为一个:

@{
    Layout = "~/Views/Shared/_X.cshtml";
}
Run Code Online (Sandbox Code Playgroud)

对于b:

@{
    Layout = "~/Views/Shared/_Y.cshtml";
}
Run Code Online (Sandbox Code Playgroud)

错误视图也是共享的.

如何为Error视图使用动态布局.例如,当处理动作"a"时发生错误时,错误显示在动作"a"的布局中,如果在处理动作"b"时发生错误,则错误显示在动作"b"的布局中?

Dar*_*rov 6

你可以编写一个帮助方法:

public static string GetLayout(this HtmlHelper htmlHelper)
{
    var action = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
    if (string.Equals("a", action, StringComparison.OrdinalIgnoreCase))
    {
        return "~/Views/Shared/_X.cshtml";
    } 
    else if (string.Equals("b", action, StringComparison.OrdinalIgnoreCase))
    {
        return "~/Views/Shared/_Y.cshtml";
    }
    return "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)

然后:

@{
    Layout = Html.GetLayout();
}
Run Code Online (Sandbox Code Playgroud)