摘要
我有一个单控件,带两个(几乎)相同的验证器,每个都链接到两个验证组。当光标离开控件时,ASP.NET会自动检查这两个验证器。是否有一种方法只触发一个(而不设置EnableClientScript="false"
),以便在blur
上没有显示两个*
符号?
细节
我的表单中有两个按钮asp:btnSave
和asp:btnSubmit
……两个按钮都需要验证,因为某些控件必须在保存时进行验证才能正常工作。
所以我有两个验证组,一个是提交用的“默认”组(即未设置ValidationGroup
属性),另一个是保存用的“SaveGroup”。有两个asp:ValidationSummary
控件来反映这些内容。
在一个单独的控件上(例如设计用于接受十进制值的控件),我有以下内容。首先是提交所需的字段,然后是提交的范围验证器。然后是第三个验证器,它是范围验证器的副本,但是属于“SaveGroup”……
<asp:TextBox runat="server" id="txtMyDecVal" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtMyDecVal"
Text="*" ErrorMessage="Enter a value" />
<asp:RangeValidator runat="server" ControlToValidate="txtMyDecVal" Type="Double"
MinimumValue="0" MaximumValue="999.99" Text="*"
ErrorMessage="Value must be between 0 and 999.99" />
<asp:RangeValidator runat="server" ControlToValidate="txtMyDecVal" Type="Double"
MinimumValue="0" MaximumValue="999.99" Text="*"
ErrorMessage="Value must be between 0 and 999.99"
ValidationGroup="SaveGroup" />
这很好运作,这两个按钮的验证都是正确的。
问题在于... 如果您在控件中输入无效文本,当光标离开控件时,ASP.NET会自动触发RangeValidators
的两个,导致出现两个*
符号的可视化问题。
有没有办法使其中一个验证器只在控件的blur
事件中检查?
我可以在一个验证器上设置EnableClientScript="false"
,但我仍然希望它在客户端首先检查控件而不进行后续操作。
更新
我一直在尝试将EnableClientScript = "false"
设置为假,因为我认为保存时的后续操作实际上并不是重要的问题。
但是,这又会导致另一个视觉问题:输入无效文本,“提交”验证器显示*
。单击“保存”,然后进行后续操作并显示“保存”验证器的*
。如果您将文本更改为有效文本,则“保存”验证器不会消失,因此仍然看起来存在问题...如果您将文本更改为不同的无效文本,则会同时出现“提交”*
,结果与之前相同......也就是两个*
符号。