Программно изменить цвет фона некоторого текста - PullRequest
0 голосов
/ 18 ноября 2010

Я реализовал главные страницы, используя этот пример Как реализовать строку состояния в приложении ASP.NET? . У меня есть свойство на моем унаследованном MasterPage SiteMaster.cs под названием Environment. На моем MasterPage.master у меня есть этот код:

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

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

То, что я хотел бы сделать, это оценить this.Environment, и если это «ЖИВОЙ», то закрасьте фон этого текста. Текст окружающей среды красным, а если «ТЕСТ» - желтым. Как бы я это сделал?

ОБНОВЛЕНИЕ Я только что добавил этот код в 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). Используйте новый Ключевое слово, если скрытие было предназначено.

ОБНОВЛЕНИЕ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 ]

3 голосов
/ 18 ноября 2010

Вместо использования синтаксиса <%= для печати окружения (это использует Response.Write), рассмотрите возможность использования серверного элемента управления, например Literal или Label.Поскольку вы хотите изменить цвет фона, это предполагает стилизацию (CSS), поэтому Label будет уместным.

(A Literal является просто заполнителем текста и не отображает HTML, тогда как Label (обычно) отображает текст внутри тегов <span>.)

Так что я бы изменил вашразметка главной страницы

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

В выделенном фрагменте кода установите для свойства Text environmentLabel значение this.Environment.В то же время протестируйте значение среды и установите свойство BackColor метки соответствующим образом (или примените класс CSS).

ОБНОВЛЕНИЕ:
Дляглавная страница, вам нужен только один класс, который будет наследоваться от 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), использующая эту главную страницу, будет отображать метку.Каждый раз, когда страница загружается, будет вызываться событие Page_Load в SiteMaster.Master.cs, и текст будет обновляться.Вам не нужно определять класс MasterPage самостоятельно, который предоставляется платформой .NET.

Возможно, вы захотите улучшить этот метод Page_Load, либо используя ViewState и, следовательно, устанавливая текст только есливы не делаете PostBack или отключаете ViewState для элемента управления environmentLabel.

Наконец, у вас будет одна или несколько страниц ASPX на вашем сайте, с чем-то вроде этого в верхней части разметки:

<%@ Page Title="" Language="C#" MasterPageFile="~/SiteMaster.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
1 голос
/ 19 ноября 2010

Вы также можете переместить код из Page_Load в Page_PreRender в MasterPage.master, и он должен работать .. он был пустым, потому что MasterPage.master Page_Load перезаписал Page_Load для SiteMaster.Master, поэтому среда никогда не назначалась.

1 голос
/ 18 ноября 2010

как то так ..

   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)   %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...