渲染不同的局部视图

时间:2013-05-10 15:21:23

标签: asp.net-mvc-3 razor

我正在尝试从_Layout文件渲染不同的局部视图,具体取决于我所处的功能,控制器方式。

部分视图位于网站的右栏中,位于_Layout中,如下所示:

<aside id="right">
@Html.Partial("RightPartial")
</aside>

我想要做的是根据我的位置呈现不同的局部视图。 如果我在索引视图中,我可能想查看新闻,在关于视图中,我可能想要查看电话号码或其他内容。

感谢任何帮助:)

1 个答案:

答案 0 :(得分:1)

@{
    string currentAction = ViewContext.RouteData.GetRequiredString("action");
    string currentController = ViewContext.RouteData.GetRequiredString("controller");
}

现在根据这些变量的值决定要渲染的部分。为了避免污染布局,我会编写一个自定义HTML帮助器:

<aside id="right">
    @Html.RightPartial()
</aside>

可能如下所示:

public static class HtmlExtensions
{
    public static IHtmlString RightPartial(this HtmlHelper html)
    {
        var routeData = html.ViewContext.RouteData;
        string currentAction = routeData.GetRequiredString("action");

        if (currentAction == "Index")
        {
            return html.Partial("IndexPartialView");
        }
        else if (currentAction == "About")
        {
            return html.Partial("AboutPartialView");
        }

        return html.Partial("SomeDefaultPartialView");
    }
}