簡體   English   中英

ASP.NET MVC2:根據查詢字符串參數修改主CSS屬性

[英]ASP.NET MVC2: modifying master css property depending on query string parameter

我正在使用ASP .NET MVC2將網站遷移到新網站。

在原始站點中,母版頁具有代碼后方以檢查查詢字符串參數值。 根據此值,后台代碼會動態修改一些CSS屬性以隱藏/顯示母版頁元素。

由於MVC2沒有代碼隱藏,因為我們應該在控制器中執行所有操作,因此在這種情況下我應該如何進行?

我看到了: 從視圖中修改主文件的asp.net mvc

它部分滿足了我的需求,但是查詢字符串處理在所有頁面中都是通用的。 如何在公共代碼段中移動此處理?

問候。

助手方法看起來像是一個好地方:

public static class HtmlHelperExtensions
{
    public static string GetCss(this HtmlHelper htmlHelper)
    {
        // read some request parameter
        // here you also have access to route data so the
        // parameter could be part of your custom routes as well
        var foo = htmlHelper.ViewContext.HttpContext.Request["foo"];

        // based on the value of this parameter 
        // return the appropriate CSS class
        return (foo == "bar") ? "barClass" : "fooClass";
    }
}

在母版頁的某處:

<body class="<%= Html.GetCss() %>">

或者,如果您始終要將其僅應用於body標簽,則這樣做可能更適合於減少標簽湯:

public static class HtmlHelperExtensions
{
    public static MvcHtmlString StartBody(this HtmlHelper htmlHelper)
    {
        var body = new TagBuilder("body");
        var foo = htmlHelper.ViewContext.HttpContext.Request["foo"];
        var bodyClass = (foo == "bar") ? "barClass" : "fooClass";
        body.AddCssClass(bodyClass);
        return MvcHtmlString.Create(body.ToString(TagRenderMode.StartTag));
    }
}

並在您的母版頁中body標記的位置:

<%= Html.StartBody() %>

我可以想到兩種解決方案:

  1. 從一個控制器庫派生您的控制器,並根據發布的Form值在那里設置ViewData參數

  2. 根本不使用ViewData,而只是在視圖中查找表單值(使用HttpContext.Current)

第二種方法違反了MVC模式。 IMO在某些情況下仍然可以接受,例如,我正在使用這種方法在導航菜單中突出顯示當前選中的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM