2010-11-18 35 views
0

この例を使用してマスターページを実装しましたHow to implement a status bar in an ASP.NET application?。 SiteMaster.csに継承されたMasterPageというプロパティがEnvironmentという名前を持っています。プログラムによってテキストの背景色を変更します

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

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

私は何をしたいことはthis.Environmentを評価し、それが「LIVE」であるならば、this.Environmentテキスト赤の背景に色を、そしてそれが「TEST」かどうされています。私のMasterPage.masterに私はこのコードを持っていますそれは黄色です。どうすればいい?

UPDATE私はちょうど

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

ページの負荷をMasterPage.masterためにこのコードを追加しましたが、テキストが設定されません、それは空白です!また、古いテキストも空白になっています(私は古いコードをそこに残しました)。私はまた、Visual Studioでの警告を得る:

'ASP.masterpage_master.Page_Load(オブジェクト、 System.EventArgs)' を非表示には メンバーのSiteMaster.Page_Load(オブジェクト、 System.EventArgs) 'を継承しました。隠蔽が意図されていた場合は、新しい キーワードを使用してください。

アップデート2:これは私が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が適切でしょう。

Literalは単なるテキストプレースホルダとLabel(通常は)<span>タグ内のテキストをレンダリングするのに対し、何のHTMLをレンダリングしません。)

だから私は

Environment: <asp:Label ID="environmentLabel" runat="server" /> 
にあなたのマスターページのマークアップを変更します

コードビハインドでTextプロパティをenvironmentLabelに設定してthis.Environmentに設定します。同時に、evironmentの値をテストし、ラベルのBackColorプロパティを適切に設定します(またはCSSクラスを適用します)。

UPDATE:マスターページの場合
、あなただけのSystem.Web.UI.MasterPageから継承する1つのクラスを、必要とします。

SiteMaster.Master(マークアップ)
SiteMaster.Master.cs(コードビハインド)
SiteMaster.Master.designer:あなたは、Visual Studioでこれを作成し、SiteMasterそれを呼び出す場合は、3つのファイルを取得します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(自動的に生成/更新)

、あなたはこのような何かをしたいでしょう。環境ラベルは、このマスターページを使用して、任意の通常のページ(ASPX)はラベルが表示されます、マスターページにあるとおり

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; 
     } 
    } 
} 

:csが、あなたはこのような何かをする必要があります。ページがロードされるたびに、SiteMaster.Master.cs内のPage_Loadイベントが呼び出され、テキストが更新されます。 MasterPageクラスを自分で定義する必要はありません。これは.NET Frameworkによって提供されています。

このPage_LoadメソッドをViewStateを使用して改良すると、PostBackを実行していない場合のみテキストを設定するか、environmentLabelコントロールでViewStateを無効にすることができます。

最後に、あなたはマークアップの一番上にこのようなもので、サイト内の1つまたは複数の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'メソッドを持てませんか?これは私が立ち往生しているところです、ありがとうございます。 –

+0

だから、あなたは普通のマスターページを持っていて、これを継承したクラスです。マスターページとして使用しているのは* this *クラスですか?私はなぜあなたが別の 'PageLoad'メソッドを持つことができないのか分かりません。なぜなら、あなたは普通のページにこれを持ち、' ​​Page'を継承しているからです。これを試してみるとエラーになりますか? –

+0

@Graham - 私は私の質問を更新しました。 –

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からPage_PreRenderにMasterPage.masterを移動することもできます。MasterPage.master Page_LoadがSiteMaster.MasterのPage_Loadを上書きして環境が割り当てられなかったため、空白になりました。

+0

すごくうれしいです、それは今働きます。 –

関連する問題