我有两页,我们称之为“receipts.com”和“business.receipts.com”。两者都通过Response.Redirect链接到不同域上的页面(“http://receipts2.com/default.aspx?mode=”) 其中“模式”参数是引用页面。
接收页面应查看查询字符串,并根据“模式”参数选择不同的CSS类。
这是如何实现的?这是正确的方法吗?
答案 0 :(得分:2)
您可以使用相同的类和不同的样式表,而不是交换类名。 处理样式表有两种方法:客户端和服务器端。
在客户端,您可以parse the query string使用以下内容禁用样式表:(document.getElementsByTagName("link")[i]).disabled = true;
在服务器端,您可以使用themes或只是在样式声明周围添加占位符,并使用查看Response.QueryString["mode"]
的代码隐藏来显示/隐藏它们:
<asp:PlaceHolder ID="placeHolder1" runat="server" Visible="false">
<link rel="stylesheet" href="/alternate.css" media="all" />
</asp:PlaceHolder>
并在某个主页面中编写代码:
if(Response.QueryString["mode"] == "blah")
{
placeHolder1.Visible = true;
}
答案 1 :(得分:1)
您可以使用document.referrer
而不是通过查询字符串传入页面。
当你说&#34;接收页面应该在查询字符串中查找,并选择一个不同的CSS类&#34;,该类将被设置为什么,即正文或像p这样的元素? / p>
普通Javascript
document.getElementById("MyElement").className = " yourClass";
的jQuery
$("p").addClass("yourClass");
也许你的意思是css主题?
然后你可以尝试
if (document.referrer == "blahblah")
document.write("<link rel='stylesheet' type='text/css' href='one.css' />)
else
document.write("<link rel='stylesheet' type='text/css' href='two.css' />)
虽然我建议调查jQuery
$.get(stylesheet, function(contents){
$("<style type=\"text/css\">" + contents + "</style>").appendTo(document.head);
});
答案 2 :(得分:1)
您可以使用不同的Page-Themes:
protected void Page_PreInit(object sender, EventArgs e)
{
switch (Request.QueryString["mode"])
{
case "receipts.com":
Page.Theme = "DefaultTheme";
break;
case "business.receipts.com":
Page.Theme = "BusinessTheme";
break;
}
}
当然,您也可以使用上面的代码将不同的Css-Classes应用于控件。
答案 3 :(得分:1)
{
string hrefstring = null;
string mode = this.Page.Request.QueryString.Item("mode");
if (mode == "a") {
hrefstring = ("~/yourcss/a.css");
} else if (mode == "b") {
hrefstring = ("~/yourcss/b.css");
}
css.Href = ResolveClientUrl(hrefstring);
css.Attributes("rel") = "stylesheet";
css.Attributes("type") = "text/css";
css.Attributes("media") = "all";
Page.Header.Controls.Add(css);
}