RequiredFieldValidator将显示内容放置在文本上

Pet*_*ete 25 asp.net webforms

我有一个RequiredFieldValidatorDisplay="Dynamic"我的ASP.NET Web窗体.我已经使用该CssClass属性为其分配了一个类.我希望使用错误消息显示display: block,所以我把它放在我的样式表中的css类.

不幸的是,验证器放置一个显示:内联在网页上的元素上,有效地覆盖了我的样式表值.

我可以摆脱它吗?

编辑:

我才意识到为什么这不起作用.在Display="Dynamic"验证器上设置时,它具有style="display: none"在渲染时在span标记上设置的效果.然后.net javascript库在none和之间切换元素的内联样式inline.这就是动态验证器的工作原理.因此,要将其显示为块元素,我将需要修改客户端事件验证的工作方式.有可能吗?

Dav*_*vid 34

使用CSS属性选择器和!important我做到了.我不得不使用"包含"选择器让它在FF中工作,但现在我已经在IE10,FF和Chrome中测试过它,到目前为止它正在运行.这很简单.这是我的aspx页面中的示例验证器:

<asp:RequiredFieldValidator runat="server" ID="rfvRequired" ErrorMessage="This is required.<br/>This is line 2" ControlToValidate="tbRequired" ValidationGroup="CommonAttributesValidationGroup" SetFocusOnError="True" CssClass="valerror" Display="Dynamic"></asp:RequiredFieldValidator>
Run Code Online (Sandbox Code Playgroud)

接下来我有一个valerror风格.

span.valerror[style*="inline"]
{
    display:block !important;
    background-color: Yellow;
    border: 1px solid #cccccc;
    font-size:.9em;
}
Run Code Online (Sandbox Code Playgroud)

这就对了.工作原理:当跨度将样式从"display:none"更改为"display:inline"时,跨度上的属性选择器将启动并强制它成为块.您只需要创建一个类似上面的CSS条目,并确保您使每个验证器成为该类.


Hen*_*y C 29

我曾经使用的一个非常hacky的解决方案(我并不自豪,但它有效)是将RequiredFieldValidator包装在一个<div>中,这是一个块元素; 因此,即使你的RequiredFieldValidator是内联的,它也在一个块div中,因此在大多数情况下它会有效地显示为display:block.

告诉你它是hacky!

  • 我不确定你为什么把你的解决方案称为"hacky".这不是hacky,这是如何做到这一点的正确方法.什么是"hacky"是在接受的答案中使用webresource.axd的愚蠢解决方案. (16认同)
  • 将验证器包装在`div`中只会为您提供从块级元素获得的"换行效果".确保你有一个带有跨越几行文字的验证器,给它一个背景颜色,你就会明白我的意思.实际块级元素具有一些属性,您无法通过在块中包装内联元素来复制这些属性. (3认同)
  • 我的解决方法!简单有效. (2认同)

Pie*_*ijs 4

也许这可以帮助您:
http://caliberwebgroup.blogspot.com/2009/02/overriding-javascript-in-webresourceaxd.html

  • 太复杂且具有侵入性。我已经用 Blakomen 的解决方案解决了这个问题 (2认同)