如果使用CssClass属性在TextBox控件上设置CSS类,则使用具有WatermarkCssClass属性的TextBoxWatermarkExtender定位该TextBox将导致其丢失CSS类,即,它将class属性重置为水印文本,而不是将其添加为附加类:

<asp:TextBox ID="TextBox1" runat="server" CssClass="text" />
<ajax:TextBoxWatermarkExtender ID="TextBoxWatermarkExtender1" runat="server" TargetControlID="TextBox1" WatermarkCssClass="watermark" />


作为输出

<input type="text" class="text" />


变成

<input type="text" class="watermark" />


当水印样式生效而不是

<input type="text" class="text watermark" />


谁能建议解决方法?

请不要在下面的解决方法中提出建议,因为我需要添加TextBox CssClass运行时。我已经通过javascript添加了TextBox CssClass,但是TextBoxWatermarkExtender WatermarkCssClass仍然覆盖了文本框类。

将WatermarkCssClass属性设置为包括两个类:

<asp:TextBox ID="TextBox1" runat="server" CssClass="text" />
<ajax:TextBoxWatermarkExtender ID="TextBoxWatermarkExtender1" runat="server" TargetControlID="TextBox1" WatermarkCssClass="text watermark" />

最佳答案

我研究了asp.net ajax发出的JS,这就是WaterMarkExtender的创建方式。

Sys.Application.add_init(function() {
$create(Sys.Extended.UI.TextBoxWatermarkBehavior, {"ClientStateFieldID":"TextBoxWatermarkExtender1_ClientState","WatermarkCssClass":"watermark","WatermarkText":"Hello","id":"TextBoxWatermarkExtender1"}, null, null, $get("TextBox1"));
})


因此,我认为您可以在应用程序初始化事件之后修改tb的类。

<script type="text/javascript">
     Sys.Application.add_load(appl_load); //register load handler
     //load handler
     function appl_load() {
            $("#TextBox1").addClass("text");
     }
</script>


参考:ASP.NET Ajax life cycle

通用...可能是您可以尝试使用“ .class”或“ input”查找输入。这取决于整体UI,因为您在问题中提到要在运行时将CssClass添加到Textbox。
我可以想到的另一种方法是进行反向操作,即获取具有水印类的所有输入,然后添加文本类。

 <script type="text/javascript">
         Sys.Application.add_load(appl_load); //register load handler
         //load handler
         function appl_load() {
                $(".watermark").addClass("text");
         }
    </script>

关于asp.net - TextBoxWatermarkExtender WatermarkCssClass覆盖TextBox CssClass,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21755995/

10-10 01:19