usr4217
usr4217

Reputation: 440

How to pass parameters to @Html.Partial and read them into the View?

I have a portion of code for Navigation Bar in the header of the website.

I repeat it within of several views. The code is almost equal for all views, change just for setting css class "active" for setting the background color of <li> TAG.

Partial Views

 @Model String
<nav class="navbar">
        <div class="container">
            <ul class="nav nav-pills nav-justified">
                <li>
                    <a href="MainPage">
                        <span class="glyphicon glyphicon-dashboard" aria-hidden="true">&nbsp;</span>
                        MainPage
                    </a>
                </li>
                <li class="active">
                    <a href="SectionSummary">
                        <span class="glyphicon glyphicon-stats" aria-hidden="true">&nbsp;</span>
                        Summary
                    </a>
                </li>
                <li>
                    <a href="Check">
                        <span class="glyphicon glyphicon-check" aria-hidden="true">&nbsp;</span>
                        Check
                    </a>
                </li>
                <li  class="(@Model=="Print")?"active":"">
                    <a href="Print">
                        <span class="glyphicon glyphicon-print" aria-hidden="true">&nbsp;</span>
                        Print
                    </a>
                </li>
            </ul>
        </div>
    </nav>

I call it in the views in this way:

@Html.Partial("~/Views/Shared/PSANavigationBar.cshtml")

I would to pass a parameter to @Html.Partial and then in the PartialView to test a value and flagging class="active" when occurs a condition!

For example:

@Html.Partial("~/Views/Shared/PSANavigationBar.cshtml", "Print")

in the view, something like this:

        </li>
         <li  class="(@Model=="Check")?"active":"">
            <a href="Check">
                <span class="glyphicon glyphicon-check" aria-hidden="true">&nbsp;</span>
                Check
            </a>
        </li>
         <li  class="(@Model=="Print")?"active":"">
            <a href="Print">
                <span class="glyphicon glyphicon-print" aria-hidden="true">&nbsp;</span>

but it doesn't work! How can I do?

Many thanks to all.

Upvotes: 0

Views: 741

Answers (1)

meJustAndrew
meJustAndrew

Reputation: 6623

The way you are calling the partial view looks okay, you just need to change the way you choose your class:

<li class="@(Model == "Check" ? "active":"")">

the Model is how you receive your parameter, and this is a way you can choose a class within a razor condition. You can see another example of how too choose your class within a condition with asp mvc razor.

You should have something like this:

@model String
<nav class="navbar">
        <div class="container">
            <ul class="nav nav-pills nav-justified">
                <li>
                    <a href="MainPage">
                        <span class="glyphicon glyphicon-dashboard" aria-hidden="true">&nbsp;</span>
                        MainPage
                    </a>
                </li>
                <li class="active">
                    <a href="SectionSummary">
                        <span class="glyphicon glyphicon-stats" aria-hidden="true">&nbsp;</span>
                        Summary
                    </a>
                </li>
                <li>
                    <a href="Check">
                        <span class="glyphicon glyphicon-check" aria-hidden="true">&nbsp;</span>
                        Check
                    </a>
                </li>
                <li  class="@(Model=="Print"?"active":"")">
                    <a href="Print">
                        <span class="glyphicon glyphicon-print" aria-hidden="true">&nbsp;</span>
                        Print
                    </a>
                </li>
            </ul>
        </div>
    </nav>

Please notice that @ is before the parenthesis ( not after it in class.

Upvotes: 1

Related Questions