如何在运行 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 页面时以编程方式设置表格背景?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式检测我的应用程序是不是在 ASP.NET 页面内以 IIS 7.0 集成模式运行

在运行时以编程方式激活约束

ASP.NET权限如何设置?

如何在运行时以编程方式计算应用 ID?

如何在其他呼叫运行时以编程方式合并呼叫(电话会议)

如何在显示旋转时以编程方式更改布局约束