我正在为两个业务组构建一个通用的 Web 应用程序。徽标/横幅需要根据查询字符串进行更改。例如,如果 url 是 http://foo.com/test?bg=a
,则显示业务组 a 的徽标,如果 url 是 http://foo.com/test?bg=b
,则显示业务组 b 的徽标。如果我只有一个 Action ,这不是问题。但是我有很多 Action 。
我可以检查所有操作的查询字符串,但必须有一个很好的方法来做到这一点。我有一种看法,我需要对路由的东西做些什么,但不知道如何做。任何人都可以让我知道该怎么做吗?
最佳答案
您可以编写一个基于查询字符串参数的自定义帮助器方法,将给定的类名附加到某个 div。那么当然你会在应用背景图像的 CSS 文件中有不同的类定义。
例如:
public static class HtmlExtensions
{
public static string BannerClass(this HtmlHelper html)
{
var bg = html.ViewContext.Controller.ValueProvider.GetValue("bg");
if (bg == null || string.IsNullOrEmpty(bg.AttemptedValue))
{
// no bg parameter => return a default class
return "default_banner";
}
if (string.Equals("a", bg.AttemptedValue))
{
return "banner_a";
}
else if (string.Equals("b", bg.AttemptedValue))
{
return "banner_b";
}
// unknown value for the bg parameter => return a default class
return "default_banner";
}
}
然后在您的
_Layout
中,您可以将此类应用于某些占位符,例如 div 甚至正文:<div class="@Html.BannerClass()">OK</div>
这样,它将始终应用于应用程序中的所有 View 。
现在剩下的就是为不同的横幅定义 CSS 规则:
.default_banner {
background-image: url('../images/default_banner.png')
}
.banner_a {
background-image: url('../images/banner_a.png')
}
.banner_b {
background-image: url('../images/banner_b.png')
}
关于Asp.net MVC 3 全局查询字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7355003/