我正在使用 ASP .NET MVC2 将网站迁移到新网站。
在原始站点中,母版页具有用于检查查询字符串参数值的代码隐藏。根据此值,代码隐藏动态修改某些 CSS 属性以隐藏/显示母版页元素。
由于 MVC2 没有代码隐藏,因为我们应该在控制器中执行所有操作,在这种情况下我应该如何进行?
我看到了这个:asp.net mvc 从视图中修改主文件
它部分满足了我的需求,但查询字符串处理对所有页面都是通用的。如何在公共代码部分中移动此处理?
问候。
我正在使用 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 在某些情况下仍然可以接受,例如我正在使用这种方法来突出显示导航菜单中当前选定的项目。