我有一种情况,我在一个文件夹中有~10-20个不同的背景图像。当我的网站加载时,我需要根据数据库中的某些值选择这些图像中的特定图像。
我考虑在body标签上使用 runat = server ,然后在page_load上动态添加属性,但在我读过这个建议的地方,人们都说这是一个非常糟糕的主意...... 此外,我尝试了它,它没有工作(但没有调试太多)。
如何以“正确的方式”做到这一点? : - )
答案 0 :(得分:12)
您可以通过通用HTML控件动态添加它:
using System.Web.UI.HtmlControls;
protected override void OnInit(EventArgs e)
{
// Define an Literal control.
HtmlGenericControl css = new HtmlGenericControl();
css.TagName = "style";
css.Attributes.Add("type", "text/css");
string imageURL = string.Empty;
//Logic to determin imageURL goes here
//Update Tag
css.InnerHtml = @"body{background-image: url(" + imageURL + ");}";
// Add the Tag to the Head section of the page.
Page.Header.Controls.Add(css);
base.OnInit(e); }
另一个选择是从代码隐藏
中获得公开的属性E.g。
public string backgroundImage = "defaultImage.png";
在页面init或onload事件中更新此内容。
并在头文件中的aspx文件中引用它:
<style type="text/css">
body
{
background-image:url(<%=backgroundImage%>);
}
</style>
或作为body标签的属性
<body style="background-image: url(<%= backgroundImage %>)">
其中任何一个都应该可以帮到你。
答案 1 :(得分:6)
你能做到的一种方法是拥有这样的属性(一种方法也可以):
protected string BodyBackgroundImageUrl
{
get
{
// I just chose random pic
return "http://www.google.com/images/logos/ps_logo2.png";
}
}
您不必像这样设置值,您可以稍后从第Init
页事件中填写。
然后在身体中你可以做类似的事情:
<body style='background:url(<%= BodyBackgroundImageUrl %>) no-repeat;'>
不重复只是为了表明你可以写任何你想要的东西。
当然,你甚至可以拥有更多的控制权和不同的方式:
public string GetBodyStyle()
{
// Get the picture somehow dynamically
string bodyBackgroundImageUrl = GetBodyBackgroundImageUrl();
// You can use StringBuilder or so, not the main point
var styles = "";
styles += string.Format("background:url({0}) no-repeat;", bodyBackgroundImageUrl);
// ... Add some extra styles if you want ...
return styles;
}
然后你的Body标签看起来像:
<body style='<%= GetBodyStyle() %>'>
...
此外,您始终可以使用从页面分配值的隐藏字段,然后在浏览器中通过JavaScript将背景URL设置为该隐藏字段。
示例(使用jQuery,但您不必):
$(function() {
// ASP.NET will fill the ID, then # with ID will show to JS as one JS string
var myHiddenField = $('#<%= myServerSideHiddenField.ClientID %>');
var bodyBackground = "url(" + myHiddenField.val() + ")";
document.body.css("background" , bodyBackground);
});
答案 2 :(得分:2)
这就是我们一直在做的事情。
<body runat="server" id="PageBody">
背后的代码
PageBody.Style.Add("background-color", "" + returncolor + "");
答案 3 :(得分:1)
我正在使用母版页,并从一些建议中获取提示和提示,到目前为止,我已经提出这是最好,最全面的解决方案:
请添加此使用:
using System.Web.UI.HtmlControls;
在MasterPage中:
<body runat="server" id="masterPageBody">
在任何代码隐藏页面功能中(例如,“Page_Load”):
HtmlControl masterPageBody =(HtmlControl)Master.FindControl("masterPageBody");
masterPageBody.Style.Remove("background-image");
masterPageBody.Style.Add("background-image", "/images/blah.jpg");
答案 4 :(得分:0)
serverPath = Request.PhysicalApplicationPath;
string chosenMap = dropdownlistMap.SelectedItem.Text;
Bitmap bm = new Bitmap(serverPath + chosenMap);
int imageWidth = bm.Width;
int imageHeight = bm.Height;
bm.Dispose();
FileInfo fi = new FileInfo(chosenMap);
string imageSrc = "~/" + fi.Name;
imgPanel.BackImageUrl = imageSrc;
imgPanel.Width = imageWidth + 4;
imgPanel.Height = imageHeight + 4;
imgPanel.BorderColor = Color.Yellow;
imgPanel.BorderStyle = BorderStyle.Groove;
imgPanel.BorderWidth = 2;
答案 5 :(得分:0)
说真的 - 这不一定是这么难。我刚刚为我正在设计的东西实现了这个...我意识到这个线程可能已经死了但是嘿 - 我想出了一个更好的解决方案IMO。
ASPX VB:
ClientScript.RegisterStartupScript(Me.[GetType](), "Background",
"document.body.style.backgroundImage = " & Chr(34) &
"url('128-700.jpg')" & Chr(34) & ";", True)
就是这样......我直接从VB代码部分调用它。我还在学习,但我知道在搜索并尝试不同的事情之后 - 这是尽可能直接的。
诀窍是 - 这段代码利用Java调用来改变背景而不是修改CSS。