フォルダ内に最大10〜20の異なる背景画像がある状況があります。私のサイトがロードされたら、データベースからのいくつかの値に基づいて、これらの画像の特定の1つを選択する必要があります。
Bodyタグでrunat = serverを使用し、page_loadで属性を動的に追加することを考えましたが、その提案を読んだところはどこでも、それは本当に悪い考えだと言われています...また、私は試しましたそれ、そしてそれは機能しませんでした(しかしそれをあまりデバッグしませんでした)。
これを「正しい方法」でどのように行うのでしょうか。 :-)
汎用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); }
他のオプションは、コードビハインドから公開されたプロパティを持つことです
例えば。
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つの方法は、次のようなプロパティを持つことです(メソッドも機能します)。
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);
});
これが私たちのやり方です。
<body runat="server" id="PageBody">
コードビハインド
PageBody.Style.Add("background-color", "" + returncolor + "");
私はマスターページを使用しており、いくつかの提案からヒントを取り入れて、これまでのところ最良かつ完全な解決策としてこれを考え出しました。
これを使用して追加してください:
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");
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;
真剣に-これはそれほど難しい必要はありません。私は自分が設計しているものにこれを実装したばかりです...このスレッドはおそらく死んでいることに気づきましたが、ちょっと-私はより良いソリューションIMOを思いつきました。
ASPX VB:
ClientScript.RegisterStartupScript(Me.[GetType](), "Background",
"document.body.style.backgroundImage = " & Chr(34) &
"url('128-700.jpg')" & Chr(34) & ";", True)
それだけです... VBコード部分から直接呼び出します。まだ学習中ですが、さまざまなことを検索して試した後、これは可能な限り簡単でした。
秘訣は、このコードはJavaの呼び出しを利用して、CSSを変更するのではなく背景を変更することです。