首先,看看我们能看到的东西
如您所见,在From我们有一个无效的电子邮件地址,而在To我们没有电子邮件地址。这两个字段都有一个RequiredFieldValidator
和另一个验证器。在From的情况下,另一个验证器是 a RegularExpressionValidator
。由于To有一个电子邮件地址,因此会显示其正确的电子邮件地址Invalid,并且由于它不为空,因此不会显示Required。我的目标是在最右边的角落显示错误,无论它是 aRequiredFieldValidator
还是 a RegularExpressionValidator
,也不管标签在其兄弟姐妹中的相对结构位置。为了简单起见,我粘贴了From的结构:
<div class="ui-field">
<label class="ui-label" for="<%= From.ClientID %>">From</label>
<span class="ui-field-req"> *</span>
<asp:RequiredFieldValidator ID="FromValidator" runat="server" ControlToValidate="From" CssClass="ui-field-error" ErrorMessage="Required" ForeColor="Red"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="FromEmailValidator" runat="server" CssClass="ui-field-error" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="From" ErrorMessage="Invalid" ForeColor="Red"></asp:RegularExpressionValidator>
<asp:TextBox ID="From" runat="server" CssClass="ui-input"></asp:TextBox>
</div>
这是我为页面编写的 CSS 的相关部分:
.ui-form .ui-field-error {
float: right;
}
这就是我们为From as HTML 生成的内容:
<div class="ui-field">
<label class="ui-label" for="ctl00_PageBody_From">From</label>
<span class="ui-field-req"> *</span>
<span id="ctl00_PageBody_FromValidator" class="ui-field-error" style="color:Red;visibility:hidden;">Required</span>
<span id="ctl00_PageBody_FromEmailValidator" class="ui-field-error" style="color: red; visibility: visible;">Invalid</span>
<input name="ctl00$PageBody$From" type="text" value="rocli@cablevision.com" id="ctl00_PageBody_From" class="ui-input">
</div>
最后的细节:如果我删除了Required的内部文本RequiredFieldValidator
,那么Invalid会跳转到正确的位置。有没有办法在纯 CSS 或 ASP.NET 中的某些属性/属性中解决这个问题?如果不是,那么解决方案将涉及我想避免的 Javascript DOM 观察者。