以编程方式更改某些文本的背景颜色

时间:2010-11-18 10:03:48

标签: c# asp.net c#-4.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,如果它是“LIVE”,则将此背景着色为环境文本红色,如果是“TEST”,则将其染成黄色。我该怎么做?

更新我刚刚将此代码添加到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 个答案:

答案 0 :(得分:3)

不要使用<%=语法打印出环境(这是使用Response.Write),而是考虑使用LiteralLabel之类的服务器控件。由于您想要更改背景颜色,这表明样式(CSS),因此Label是合适的。

(A Literal只是一个文本占位符,不会呈现HTML,而Label(通常)会在<span>个标记内呈现文字。)

所以我会将您的母版页标记更改为

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

在代码隐藏中,将Text的{​​{1}}属性设置为environmentLabel。同时,测试环境的值,并根据需要设置标签的this.Environment属性(或应用CSS类)。

<强>更新
对于母版页,您只需要一个类,它将继承自BackColor。如果您在Visual Studio中创建它并将其命名为System.Web.UI.MasterPage,您将获得3个文件:

SiteMaster.Master(标记)
SiteMaster.Master.cs(代码隐藏)
SiteMaster.Master.designer.cs(自动生成/更新)

在SiteMaster.Master文件中,您需要以下内容:

SiteMaster

在SiteMaster.Master.cs中,你需要这样的东西:

<%@ 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>

由于环境标签位于母版页上,使用此母版页的任何普通页面(ASPX)都将显示标签。每次加载页面时,都会调用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; } } } 事件,并更新文本。您不需要自己定义Page_Load类,这是由.NET框架提供的。

您可能希望通过使用ViewState来改进此MasterPage方法,因此只有在您没有进行PostBack时才设置文本,或者在Page_Load控件上禁用ViewState。

最后,您的网站中将有一个或多个ASPX页面,在标记的顶部有这样的内容:

environmentLabel

答案 1 :(得分: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)   %>

答案 2 :(得分:1)

您也可以将代码从Page_Load移动到MasterPage.master中的Page_PreRender,它应该可以工作..它是空白的,因为MasterPage.master Page_Load覆盖了SiteMaster.Master的Page_Load,因此环境从未被分配。