如何在运行 asp.net 页面时以编程方式设置表格背景?
Posted
技术标签:
【中文标题】如何在运行 asp.net 页面时以编程方式设置表格背景?【英文标题】:How do I set a table background programmatically while running an asp.net page? 【发布时间】:2010-12-11 09:17:24 【问题描述】:我有一个 aspx 页面,它具有一种默认背景颜色。 I need to be able to change it programmatically when a certain option of a radio button is selected.我尝试设置表的 ID 字段,但我似乎无法在我的 C# 代码隐藏文件中访问它。
我原来的表是:
<table id="tblSheet" runat="server" style="border-color: #FF9900; border-style: solid;
border-width: thin; width:100%; background-color: #99ccff;" cellspacing="4"
cellpadding="1">
不过,我在智能感知中看不到 id。
编辑: 现在我可以在后面的代码中看到我的表格,我正在尝试实际更改背景颜色。这是我的单选按钮列表的代码:
<asp:RadioButtonList ID="rdoStatus" runat="server" AutoPostBack="true"
RepeatDirection="Horizontal" Visible="true"
OnSelectedIndexChanged="rdoStatus_OnSelectionChanged">
<asp:ListItem Value="181001" Text="Open"/>
<asp:ListItem Value="181002" Text="Closed" />
<asp:ListItem Value="181003" Text="Pending" />
</asp:RadioButtonList>
我遇到了在事件处理程序中设置的断点,但回发时背景颜色没有改变。如果选择的项目是待定,那么我想将背景颜色更改为不同的颜色。如果他们将单选按钮更改为打开或关闭,那么我想确保背景颜色是默认颜色。
编辑 2: 我的事件处理程序中的代码非常简单:
if (rdoStatus.SelectedValue == "181003")
tblSheet.BgColor = "#ff9a9a";
else
tblSheet.BgColor = "#99ccff";
【问题讨论】:
你能告诉我们rdoStatus_OnSelectionChanged中的代码吗? 【参考方案1】:将runat="server"
放在表格标签中
完成此操作后,您将能够以编程方式访问该表。
要直接改变背景颜色,试试:
if (rdoStatus.SelectedValue == "181003")
tblSheet.Style.Add("background-color", "#ff9a9a");
else
tblSheet.Style.Add("background-color", "#99ccff");
如果你可以使用样式表,试试这个:
if (rdoStatus.SelectedValue == "181003")
tblSheet.CssClass = "default_color"
else
tblSheet.CssClass = "other color"
【讨论】:
是的,做到了。谢谢,艾莉森!【参考方案2】:我搞定了! 我将表格更改为以下(我删除了背景颜色):
<table id="tblSheet" runat="server" style="border-color: #FF9900; border-style: solid;
border-width: thin; width:100%;" cellspacing="4" cellpadding="1">
然后在我后面的代码中,当 Page_Load 不是回发时,我设置了背景颜色:
tblSheet.Bgcolor = "#99ccff";
瞧!单选按钮列表和事件处理程序与问题中的相同。回发将颜色改回原来的颜色。感谢大家的帮助!
【讨论】:
【参考方案3】:正如 Joel 所说,如果您只需要更改颜色,但如果您将表格转换为服务器控件(在表格或其他服务器控件中使用 runat=server),javascript 是一个更好的解决方案,不要忘记使用在 getElementById 中嵌入代码块来检索表 id,因为 ASP.NET 在呈现页面时会重命名 id。
在 Joel 的示例中,它将如下所示:
<input type="radio" value="..." name="..." id="..." onclick="document.getElementById('<% =tblSheet.ClientID%>').style.backgroundColor = '#99ccff';" />
【讨论】:
它只重命名服务器 ID,即使这样也只在嵌套命名容器中。由于他在硬编码一个 html 字符串,所以名称不会改变。【参考方案4】:您是否正在触发回发以直接从单选按钮进行此更改? 这是目前唯一改变的事情吗?
如果对这两个问题的回答都是“是”,那么您应该考虑全部使用 javascript 执行此操作并完全跳过回发:
<input type="radio" value="..." name="..." id="..."
onclick="document.getElementById('tblSheet').style.backgroundColor = '#99ccff';" />
这里的原因是,与将所有内容都保存在客户端相比,回发速度非常慢,而且它们还损害了 Web 应用程序轻松扩展的能力(当然,服务器上的更多工作不利于可扩展性)。因此,它对用户来说速度更快,而对您的服务器来说工作量更少。
但是,在将工作移出服务器时,您也需要注意不要失去禁用 javascript 的用户的功能。但是如果这个回发已经被你的单选按钮触发了,那么你就已经依赖于 JavaScript 来实现这个功能了。
【讨论】:
我不担心可扩展性。这是少数人使用的内部应用程序。我只需要它工作。我们在该网络上的所有计算机都启用了 JavaScript。我会试试这个。【参考方案5】:首先,您看不到表格,因为表格的 runat="server" 属性可以让您看到 ID,其次,即使您看到,您也无法更改表格的颜色代码中的表。即使您将访问表格的属性并在那里设置颜色,它也无济于事,因为您需要再次发回以查看更改。
您需要做的是使用更新面板并使用变量而不是#FF9900,这样默认颜色将为红色或任何颜色,并且在复选框的选中事件中您将值更改为绿色或其他颜色.
【讨论】:
以上是关于如何在运行 asp.net 页面时以编程方式设置表格背景?的主要内容,如果未能解决你的问题,请参考以下文章