我使用此示例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();
}
}
}
答案 0 :(得分:3)
不要使用<%=
语法打印出环境(这是使用Response.Write
),而是考虑使用Literal
或Label
之类的服务器控件。由于您想要更改背景颜色,这表明样式(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,因此环境从未被分配。