![](/img/trans.png)
[英]Can I Inherit a view of Asp.net mvc2 from normal asp.net master page
[英]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() %>
我可以想到兩種解決方案:
從一個控制器庫派生您的控制器,並根據發布的Form值在那里設置ViewData參數
根本不使用ViewData,而只是在視圖中查找表單值(使用HttpContext.Current)
第二種方法違反了MVC模式。 IMO在某些情況下仍然可以接受,例如,我正在使用這種方法在導航菜單中突出顯示當前選中的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.