我正在使用ASP .NET MVC2将网站迁移到新网站。
在原始站点中,母版页具有代码隐藏功能,可以检查查询字符串参数值。根据此值,代码隐藏动态修改一些CSS属性以隐藏/显示母版页元素。
由于MVC2没有代码隐藏,因为我们应该在控制器中执行所有操作,在这种情况下我该如何处理呢?
我看到了这一点:asp.net mvc modifying master file from a view
它部分满足了我的需求,但查询字符串处理对所有页面都是通用的。如何在公共代码部分中移动此处理?
问候。
答案 0 :(得分:1)
辅助方法看起来很合适:
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 :(得分:0)
我可以想到两个解决方案:
从一个控制器基础派生您的控制器,并根据发布的表格值设置ViewData参数
根本不要使用ViewData,只是在视图中查找表单值(使用HttpContext.Current)
第二种方法违反了MVC模式。 IMO在某些情况下仍然可以接受,例如我使用此方法突出显示导航菜单中当前选定的项目。