如何在代码隐藏中从内容页设置母版页正文的颜色



所以我有这个下拉列表,我想使用它更改整个网站的背景颜色。 这是我的母版页面正文:

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

我正在尝试像这样设置背景。

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

但是当我尝试将属性添加到正文时,我收到一条错误消息: "控件不包含'属性'的定义...">

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

编译器可以很好地准确地告诉您正在处理哪种错误,Master.FindControl 返回一个类型为 Control的对象,该对象没有属性属性。但是,控件对象可以强制转换为它们对应的特定类型。在我们的例子中,HtmlGenericControl可以完成这项工作。

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

using System.Web.UI.HtmlControls;

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

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

小心你如何使用属性,你在代码中显示的内容会创建一个值为Green的背景颜色类型的属性,你真正想要的是向主体添加一个类,或者像我一样直接访问style属性,但添加你的值到它。

我专门使用了加法赋值运算符,以防正文上有任何其他样式,这样您就不会覆盖它们而只包含您的更改。但是,如果您想完全重写它,您可以更改它或使用具有正确属性名称(样式)的方法。

最新更新