3

我有一个 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";
}
4

5 回答 5

5

放置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"
}
于 2009-10-29T19:28:54.883 回答
2

您是否触发了直接从单选按钮进行此更改的回发?
这是目前唯一改变的事情吗?

如果对这两个问题的回答都是“是”,那么您应该考虑在 javascript 中执行所有这些操作并完全跳过回发:

<input type="radio" value="..." name="..." id="..."
    onclick="document.getElementById('tblSheet').style.backgroundColor = '#99ccff';" />

这里的原因是,与将所有内容都保留在客户端相比,回发速度非常慢,而且它们还损害了 Web 应用程序轻松扩展的能力(当然,服务器上的更多工作不利于可扩展性)。所以它对用户来说更快,对你的服务器来说更少的工作。

但是,在将工作移出服务器时,您还需要注意不要丢失禁用 javascript 的用户的功能。但是如果这个回发已经被你的单选按钮触发了,那么你已经依赖于 JavaScript 来实现这个功能。

于 2009-10-29T19:33:40.257 回答
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";

瞧!单选按钮列表和事件处理程序与问题中的相同。回发将颜色改回原来的颜色。感谢大家的帮助!

于 2009-10-30T14:56:39.333 回答
0

首先,您看不到表格,因为表格的 runat="server" 属性允许您查看 ID,其次,即使您看到表格,您也无法更改表格的颜色你的代码。即使您将访问表格的属性并在那里设置颜色,它也无济于事,因为您需要再次发回以查看更改。

您需要做的是使用更新面板并使用变量而不是#FF9900,这样默认颜色将为红色或任何颜色,并且在复选框的选中事件中您将值更改为绿色或其他颜色。

于 2009-10-29T19:32:58.720 回答
0

就像 Joel 所说的,如果您只需要更改颜色,但如果您将表格转换为服务器控件(在表格或其他服务器控件中使用 runat=server),JavaScript 是一个更好的解决方案,不要忘记使用嵌入式代码块在 getElementById 中检索表 id,因为 ASP.NET 在呈现页面时会重命名 id。

在 Joel 的示例中,它将如下所示:

<input type="radio" value="..." name="..." id="..."    onclick="document.getElementById('<% =tblSheet.ClientID%>').style.backgroundColor = '#99ccff';" />
于 2009-10-29T20:23:24.353 回答