Mappan
Mappan

Reputation: 2617

Render different partial views

I'm trying to render different partial views from the _Layout file depending on what function I'm in, controller-wise.

The partial view is in the right column of the website which is located in the _Layout like so:

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

What I want to do is render a different partial view depending on where I am. If I'm in the Index view I might want to view news and in the About view I might want to view phone numbers or something.

Appreciate any help :)

Upvotes: 0

Views: 814

Answers (1)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038720

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

Now based on the values of those variables decide which partial to render. To avoid polluting the Layout I would write a custom HTML helper:

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

which might look like this:

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");
    }
}

Upvotes: 1

Related Questions