2

私はMVC3webisteを開発しています。サイトにjqueryメニューがあります。すべてのページがメニューを使用するわけではありません。したがって、ログオンページまたは許可されていない場合のログアウトページにはメニューがありません。これを行うには、_Layoutページに以下のようなRenderSectionを配置します。

 @RenderSection("Menu", required: false)

次に、メニューがあるはずのページに、以下のセクションを含めました。

@section Menu{
    <ul id="menu" style="width: 150px; height: 150px; margin-right: 10px; z-index: 9999;">
        <li>@Html.ActionLink("Dashboard", "Dashboard", "Home", null, new { @class = "menu-text" })</li>
        <li>@Html.ActionLink("History", "ViewHistory", "History", null, new { @class = "menu-text" })</li>
        <li><a class="menu-text" href="#">Reports</a>
            <ul style="z-index: 9999;">
                <li>@Html.ActionLink("File Report", "ViewFileReport", "Reports", null, new { @class = "menu-text" })</li>
                <li><a class="menu-text" href="#">New Files</a></li>
                <li><a class="menu-text" href="#">Old Files</a></li>
            </ul>
        </li>
        <li><a class="menu-text" href="#">Admin</a>
            <ul style="z-index: 9999;">
                <li>@Html.ActionLink("Change Password", "ChangePassword", "Home", null, new { @class = "menu-text" })</li>
            </ul>
        </li>
        <li>@Html.ActionLink("Log Off", "LogOff", "Home", null, new { @class = "menu-text" })</li>
    </ul>
}

メニューに追加して変更し、ページを追加しているので、必要なすべてのページにこのRenderSectionがあることに気付きましたが、ログオンページやFirstLandingページには8/で編集する必要があるため面倒です。現在9か所あり、今後も増える予定です。私が望むことを達成するためのより良い方法は何でしょうか?

4

2 に答える 2

3

はい、メニューマークアップをに入れたいのですが_Layout.cshtml、必要な場合にのみレンダリングしてください。

bool値を入力しViewBagて、それを必要とするページのメニューをオンにすることができます。

コントローラのアクションに、次のように入力します。

ViewBag.ShowMenu = true;

次に、_Layout.cshtml次のような条件を設定できます。

@if ( ViewBag.ShowMenu == true )
{
  <ul id="menu" ... your menu markup here
  </ul>
}
于 2013-01-04T10:37:34.923 に答える
0

App_Code次のように、フォルダ内のファイルに配置できます。

App_Code\Helpers.cshtml

@helper Menu()
{
    <ul id="menu" style="width: 150px; height: 150px; margin-right: 10px; z-index: 9999;">
        <li>@Html.GetPageHelper().ActionLink("Dashboard", "Dashboard", "Home", null, new { @class = "menu-text" })</li>
        <li>@Html.GetPageHelper().ActionLink("History", "ViewHistory", "History", null, new { @class = "menu-text" })</li>
        <li><a class="menu-text" href="#">Reports</a>
            <ul style="z-index: 9999;">
                <li>@Html.GetPageHelper().ActionLink("File Report", "ViewFileReport", "Reports", null, new { @class = "menu-text" })</li>
                <li><a class="menu-text" href="#">New Files</a></li>
                <li><a class="menu-text" href="#">Old Files</a></li>
            </ul>
        </li>
        <li><a class="menu-text" href="#">Admin</a>
            <ul style="z-index: 9999;">
                <li>@Html.GetPageHelper().ActionLink("Change Password", "ChangePassword", "Home", null, new { @class = "menu-text" })</li>
            </ul>
        </li>
        <li>@Html.GetPageHelper().ActionLink("Log Off", "LogOff", "Home", null, new { @class = "menu-text" })</li>
    </ul>
}

そして、次のコードからインスタンスGetPageHelper()を取得するために必要なメソッドの別のクラスをプロジェクトに追加します。HtmlHelper<T>App_Code

public static class PageHelper
{
    public static HtmlHelper<object> GetPageHelper(this System.Web.WebPages.Html.HtmlHelper html)
    {
        return ((WebViewPage)WebPageContext.Current.Page).Html;
    }

    public static UrlHelper GetUrlHelper(this System.Web.WebPages.Html.HtmlHelper html)
    {
        return ((WebViewPage) WebPageContext.Current.Page).Url;
    }
}

これで、ビューまたはレイアウトで次のようなメニューを使用できます。

@Helpers.Menu()
于 2013-01-04T10:38:20.883 に答える