如何在代码后面的ContentPage中设置MasterPage正文的颜色

时间:2017-05-26 06:44:53

标签: html asp.net

所以我有这个下拉列表,我想用它来改变整个网站的背景颜色。 这是我的MasterPage主体:

<body style="overflow: auto;" runat="server" id="bodyMasterPage">

我试图像这样设置背景。

var body = Master.FindControl("bodyMasterPage");

        if (ddlColor.SelectedValue == "Green")
        {
            body.Attributes.Add("background-color", "Green");
        }

但是当我尝试将属性添加到正文时,我收到一条错误说: &#34;控件不包含&#39;属性&#39; ...&#34;

的定义

所以我的问题是,我该如何从这里实际更改MasterPage的背景颜色?

1 个答案:

答案 0 :(得分:1)

编译器非常清楚地告诉你正在处理什么样的错误,Master.FindControl返回一个 Control 类型的对象,它没有属性属性。但是, Control 对象可以转换为它们对应的特定类型。在我们的例子中, HtmlGenericControl 可以完成这项工作。

您必须首先在页面顶部添加以下行来包含相应的命名空间:

using System.Web.UI.HtmlControls;

然后你可以用这个来调整你的例子:

var body = (HtmlGenericControl)Master.FindControl("bodyMasterPage");
body.Attributes["style"] += " background-color: green;";

小心你如何使用属性,你在代码中显示的内容会创建一个 background-color 类型的属性,其值为 Green ,以及你是什么真正想要的是要么添加一个类到正文或直接访问样式属性,就像我做的那样,但是将值添加到它。

我特意使用了添加赋值运算符,以防身体上有任何其他样式,因此您不会覆盖它们并只包含您的更改。但是,如果您想完全重写它,您可以更改它或使用具有适当属性名称( style )的方法。