2010-11-18 162 views
0

我已經使用此示例How to implement a status bar in an ASP.NET application?實現了母版頁。我的SiteMaster.cs上有一個屬性,它繼承了名爲Environment的MasterPage。在我MasterPage.master我有這樣的代碼:以編程方式更改某些文本的背景顏色

<body> 
    <form id="frmMaster" runat="server"> 
     <.. some content removed for brevity ...> 

     Environment: <%= this.Environment %> 
    </form> 
</body> 

我想要做的是評估this.Environment,如果它是「活」然後選擇顏色this.Environment文字的背景紅色的,如果它的「TEST」爲它着黃色。我將如何做到這一點?

UPDATE我剛加入這個代碼MasterPage.master

protected void Page_Load(object sender, EventArgs e) 
{ 
    lblEnvironment.Text = this.Environment; 
    if (this.Environment == "LIVE") 
    { 
     lblEnvironment.BackColor = System.Drawing.Color.Red; 
    }     
} 

該頁面加載,但文字不被設置,它是空白!此外,填充的舊文本現在也是空白的(我現在留下了舊代碼)。我也得在Visual Studio中警告:

'ASP.masterpage_master.Page_Load(對象, System.EventArgs)' 隱藏繼承 成員 'SiteMaster.Page_Load(對象, System.EventArgs)'。如果需要隱藏,請使用新的 關鍵字。

UPDATE2:這是我在SiteMaster.cs

using System; 
using System.Web.UI; 

public class SiteMaster : MasterPage 
{ 
    public string StatusText { get; set; } 
    public string StatusTime { get; set; } 
    public string Environment { get; set; } 

    protected virtual void Page_Load(object sender, EventArgs e) 
    { 
     if (!this.IsPostBack) 
     { 
      if (Session["status"] != null) 
      { 
       this.StatusText = Session["status"].ToString(); 
       this.StatusTime = Session["statusTime"].ToString(); 
      } 

      this.Environment = Session["environment"].ToString(); 
     } 

    } 
} 

回答

3

除了使用<%=語法打印出環境(這是使用Response.Write)的,可以考慮使用一個服務器控件一樣一個Literal或一個Label。由於您想更改背景顏色,因此建議使用樣式(CSS),因此Label將是合適的。

(A Literal只是一個文本佔位符,並呈現無HTML,而Label(通常)呈現內<span>標籤的文本。)

所以我會改變你的母版頁標記來

Environment: <asp:Label ID="environmentLabel" runat="server" /> 

在代碼隱藏中,將environmentLabelText屬性設置爲this.Environment。同時,測試環境的值,並根據需要設置標籤的BackColor屬性(或應用CSS類)。

UPDATE:
對於一個母版頁,你只需要一個類,它將從System.Web.UI.MasterPage繼承。如果您在Visual Studio中創建此並調用它SiteMaster,你會得到3個文件:

SiteMaster.Master(標記)
SiteMaster.Master.cs(代碼隱藏)
SiteMaster.Master.designer的.cs(自動生成/更新)

在SiteMaster.Master文件,你會想是這樣的:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="SiteMaster.master.cs" Inherits="WebApplication1.SiteMaster" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="environmentLabel" runat="server" /> 

     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server" /> 
    </div> 
    </form> 
</body> 
</html> 

在SiteMaster.Master。CS,你需要這樣的事:

using System; 

namespace WebApplication1 
{ 
    public partial class SiteMaster : System.Web.UI.MasterPage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      this.environmentLabel.Text = "environment"; 
      this.environmentLabel.BackColor = System.Drawing.Color.Red; 
     } 
    } 
} 

隨着環境的標籤是母版頁上,任何正常的頁面(ASPX)使用該母版頁將得到顯示的標籤。每次加載頁面時,SiteMaster.Master.cs中的Page_Load事件都將被調用,並且文本將被更新。您不需要自己定義MasterPage類,這是由.NET框架提供的。

您可能想要改進Page_Load方法,或者通過使用ViewState,因此只在不執行PostBack時設置文本,或者通過禁用environmentLabel控件上的ViewState。

最後,你必須在你的網站上的一個或多個ASPX頁面,像這樣的東西在標記的頂部:

<%@ Page Title="" Language="C#" MasterPageFile="~/SiteMaster.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> 
+1

我應該在哪個事件中設置BackColor?問題是'MasterPage'繼承自SiteMaster.cs,並且SiteMaster.cs上有一個'Page_Load'方法。我不能在MasterPage.master和SiteMaster.cs中有一個'Page_Load'方法嗎?這是我卡住的地方,謝謝。 – 2010-11-18 10:49:04

+0

所以你有一個普通的母版頁,然後是一個繼承自這個的類,它是你用作母版頁的*這個類?我不明白爲什麼你不能擁有另外一個'PageLoad'方法,畢竟,你在普通頁面上有這些方法,並且它們是從'Page'繼承的。如果你嘗試這個,你會得到一個錯誤嗎? – 2010-11-18 10:53:48

+0

@格拉漢姆 - 我已經更新了我的問題,你介意看一下嗎? – 2010-11-18 11:55:54

1

這樣的事情..

var preTag = @" <font style=""background:yellow;color:#ff0000;font-weight:600;""><b>"; 
    var postTag = " </b></font>"; 

    Environment: <%= ((this.Environment=="LIVE") ? (preTag + this.Environment + postTag) : this.Environment) %> 
1

您也可以將代碼從Page_Load移動到MasterPage.master中的Page_PreRender中,它應該可以工作..它是空白的,因爲MasterPage.master Page_Load覆蓋了SiteMaster.Master的Page_Load,因此Environment從未被分配過。

+0

偉大的東西感謝,它現在的作品。 – 2010-11-19 10:07:21

相關問題