如何在ASP.NET中的用户控件中使用其ID获取按钮?

时间:2013-03-14 15:45:30

标签: c# asp.net

我制作了一个用户控件(.ascx),其中包含一个包含六个按钮的div。 它有一个字符串属性“selectedButton”,其中包含其中一个按钮的ID值。

我想要做的是能够在页面加载时更改ID对应于selectedButton属性的按钮的背景颜色。

现在我正在ascx.cs中对selectedButton属性的值进行切换,如下所示:

switch (selectedButton)
{
  case "Button1":
  Button1.BackColor = System.Drawing.ColorTranslator.FromHtml("#00CC00");
  break;
  //etc...
}

它有效,但这似乎不是很有效,如果我有更多的按钮,它也不会动态。

我已经尝试将其放入ascx源:

<script type="text/javascript">
    var sb = document.getElementById("<%=this.selectedButton %>");
    sb.BackColor = System.Drawing.ColorTranslator.FromHtml("#00CC00");
</script>

但没有任何结果。

提前致谢。

4 个答案:

答案 0 :(得分:1)

答案取决于selectedButton包含的内容。如果它包含服务器端ID(并且在您的代码片段中似乎是这种情况),那么您可以在后面的代码中使用FindControl

Button button = this.FindControl(selectedButton) as Button;
if (button != null)
{
    button.BackColor = System.Drawing.ColorTranslator.FromHtml("#00CC00");
}

但是,如果selectedButton包含客户端ID(ASP.NET为每个控件生成的ID),那么您应该使用一些javascript:

<script type="text/javascript">
    var sb = document.getElementById("<%= this.selectedButton %>");
    sb.style['background-color'] = '#00CC00';
</script>

答案 1 :(得分:0)

您正在尝试将服务器端与客户端代码混合使用。那不行。

如果您希望在没有往返回服务器的客户端上更改此项,请使用纯javascript。这意味着您无法在此处使用this.selectedButtonSystem.Drawing.ColorTranslator或任何其他C#代码。

使用纯粹的javascript解决方案来改变颜色,你会发现很多如何做到这一点。

答案 2 :(得分:0)

试试这个:

<script type="text/javascript">
    var sb = document.getElementById("<%=this.Button1.ClientID %>");
    sb.style.backgroundColor =  "<%= System.Drawing.ColorTranslator.FromHtml("#00CC00") %>)";
</script>

在此处找到:http://forums.asp.net/t/1320687.aspx/1

但是这篇SO帖子正是我真正想要的:Passing ASP.NET client IDs in to a javascript function

他们使用uniqueID但是从内存中,ClientID才是正确的解决方案。

答案 3 :(得分:0)

使用clientClick调用方法来更改颜色并传递clientId值,使用.style.background = color;使用javascript,这里有更多信息How do I change the background color with JavaScript?