CSS样式不使用ID

时间:2012-03-09 05:35:50

标签: asp.net css

我正在为我的项目使用asp.net/C#。目前我有一个default.aspx页面和一个母版页。default.aspx页面有很多控件,对于我定义的每个控件{{ 1}}和class。我面临的问题是,当我使用idstyle应用于特定控件时,样式会被正确反映,当我使用控件的id执行此操作时,样式不会被反映出来。 我纠正了这个问题,但我不知道如何解决这个问题。 例如, 我有一个class textbox,当我应用

这样的风格时
id="txtCustNo"

它没有反映,,,当我应用类似#txtCustNo{border:1px solid red} 的样式时,它会显示更改,但是id为#ctl00_ContentPlaceHolder1_txtCustNo ..有人可以指出我哪里出错了。谢谢。

3 个答案:

答案 0 :(得分:4)

服务器控件上的ID是自动生成的,与客户端生成的ID不同。

您可以通过以下方式找到生成的ID:<%#txtCustNo.ClientID%>

ASP.NET 4在Control基类上支持新的ClientIDMode属性。 ClientIDMode属性指示控件在呈现时应如何生成客户端ID值。 ClientIDMode属性支持四种可能的值:

  1. AutoID - 以.NET 3.5中的方式呈现输出(自动生成的ID仍然会像ctrl00一样呈现前缀以实现兼容性)
  2. Predictable(默认) - 修剪任何“ctl00”ID字符串,如果列表/容器控件连接子ID(例如:id =“ParentControl_ChildControl”)
  3. 静态 - 将完整的ID命名控制交给开发人员 - 无论他们设置为控件的ID是什么(例如:id =“JustMyId”)
  4. Inherit - 告诉控件遵从父容器控件的命名行为模式
  5. 在4.0之前使用ASP.Net时,您必须使用自动生成的ID。

    有关4.0功能的更多信息,请参阅此链接。

    http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx

答案 1 :(得分:3)

客户端ID不等于runat="server"控件的ID property。要在客户端上获取ID,您可以使用ClientID property

在较新的ASP.NET版本(从版本4开始),还有一个ClientIDMode property来控制生成。

因此,要解决您的问题,您可以将ClientIDMode设置为ClientIDMode.Static或以某种方式从后面的代码访问ClientID属性,并将此值放入CSS定义中。

或者你也可以:

  • 将文本框放在某个容器控件(例如div)中,该控件具有 no runat="server"并将ID放入此容器控件中,将CSS更改为例如#txtContainer input{border:1px solid red}
  • 使用文本框的CssClass property并在CSS文件中使用此类,而不是ID。

答案 2 :(得分:1)

  1. 如果您使用的是Visual Studio 2010,则可以将控件的clientID模式设置为ClientIDMode="Static"
  2. 我建议你使用CSS和皮肤文件
  3. 此外,如果您尝试通过CSS设置控件的样式,只需在它周围包裹一个div&然后应用样式(这些应用于div中的所有输入)

      

    divId输入{

              width: 100px;
         }
    
         

    ASP.NET Themes and Skins Themes & Skins