ASP.NET自定义验证客户端和服务器端验证不点火
-
22-08-2019 - |
题
这还没有发生到我面前,但由于某种原因在客户端和服务器端验证事件不会被触发:
<asp:TextBox ID="TextBoxDTownCity" runat="server" CssClass="contactfield" />
<asp:CustomValidator ID="CustomValidator2" runat="server" EnableClientScript="true"
ErrorMessage="Delivery Town or City required"
ClientValidationFunction="TextBoxDTownCityClient"
ControlToValidate="TextBoxDTownCity"
OnServerValidate="TextBoxDTownCity_Validate" Display="Dynamic" >
</asp:CustomValidator>
服务器端验证事件:
protected void TextBoxDTownCity_Validate(object source, ServerValidateEventArgs args)
{
args.IsValid = false;
}
客户端验证事件:
function TextBoxDCountyClient(sender, args) {
args.IsValid = false;
alert("test");
}
我想以最低的服务器端验证将火但没有。这从来没有发生在我身上。这真的让我难住了。
我看着输出和ASP.NET正在识别客户端功能:
ASP.NET JavaScript的输出:
var ctl00_ctl00_content_content_CustomValidator2 = document.all ? document.all["ctl00_ctl00_content_content_CustomValidator2"] : document.getElementById("ctl00_ctl00_content_content_CustomValidator2");
ctl00_ctl00_content_content_CustomValidator2.controltovalidate = "ctl00_ctl00_content_content_TextBoxDTownCity";
ctl00_ctl00_content_content_CustomValidator2.errormessage = "Delivery Town or City required";
ctl00_ctl00_content_content_CustomValidator2.display = "Dynamic";
ctl00_ctl00_content_content_CustomValidator2.evaluationfunction = "CustomValidatorEvaluateIsValid";
ctl00_ctl00_content_content_CustomValidator2.clientvalidationfunction = "TextBoxDTownCityClient";
渲染自定义的验证:
<span id="ctl00_ctl00_content_content_CustomValidator2" style="color:Red;display:none;">Delivery Town or City required</span>
任何一个可以提供一些线索,为什么客户端和服务器端验证不会开火。
修改:错字我在错误的功能粘贴,问题仍然是相同的强>
只是另一个更新到最后一个注释:其中由文本框不能为空。我测试了这一点,这是不正确的。在一个空白页的CustomValidator解雇我的客户端验证功能罚款没有值:
<asp:TextBox ID="TextBox1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server"
ErrorMessage="CustomValidator" ClientValidationFunction="TextBoxDAddress1Client"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
解决方案
当CustomValidator
不为空,你TextBox
才会启用。
如果您需要确保它不是空的,那么你就需要一个的 RequiredFieldValidator
太
注意:强>如果输入控制是空的, 没有验证函数调用, 验证成功。用一个 RequiredFieldValidator控件 要求用户输入数据 输入控制。
修改强>
如果您的CustomValidator
指定ControlToValidate
属性(和原来的例子一样)然后您的验证函数才会被调用时,控制不为空。
如果你不指定ControlToValidate
那么你的验证函数都会被调用一次。
这开辟了一个第二个可能的解决问题的办法。而不是使用一个单独的RequiredFieldValidator
,你可以省略从ControlToValidate
和设置您的验证功能CustomValidator
属性做这样的事情:
客户端代码(Java脚本):
function TextBoxDCountyClient(sender, args) {
var v = document.getElementById('<%=TextBoxDTownCity.ClientID%>').value;
if (v == '') {
args.IsValid = false; // field is empty
}
else {
// do your other validation tests here...
}
}
服务器端代码(C#):
protected void TextBoxDTownCity_Validate(
object source, ServerValidateEventArgs args)
{
string v = TextBoxDTownCity.Text;
if (v == string.Empty)
{
args.IsValid = false; // field is empty
}
else
{
// do your other validation tests here...
}
}
其他提示
使用这样的:
<asp:CustomValidator runat="server" id="vld" ValidateEmptyText="true"/>
要验证一个空白字段。
您不需要添加2个验证!
客户端验证没有被执行我所有的网页表单上,我不知道为什么。原来,问题是JavaScript函数的名称是一样的服务器控件ID。
所以你不能做到这一点...
<script>
function vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="vld" />
但是,这工作的:
<script>
function validate_vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="validate_vld" />
我猜测它与内部.NET的Javascript冲突?
你验证控制造成回发已设置的CausesValidation到TRU,它没有验证组,分配给它的?
我不知道还有什么可能导致此行为。
此外,检查您不使用验证组,就好像ValidationGroup属性设置,并通过
没有显式调用该验证难道不火 Page.Validate({Insert validation group name here});
服务器端验证将不火,回发不发。
不要你有没有通过一些其他的验证?
由于您指定ClientValidationFunction="TextBoxDTownCityClient"
不执行客户端验证,这将查找名为TextBoxDTownCityClient
为验证函数的功能,但功能名称应为
TextBoxDAddress1Client
(如你写)
感谢您对的ControlToValidate LukeH该信息!
我是想在我的代码做的是只确保一些文本字段的在该领域的一些文本时,文本字段B具有特殊的价值。否则,可以是空白或任何其他。在我的标记摆脱的ControlToValidate =“A”的固定问题对我来说。
干杯!