如何在通用处理程序(.ashx)中使用ASP.NET验证控件?

时间:2015-04-20 07:52:30

标签: asp.net ajax validation ashx

我正在使用jQuery AJAX提交表单并进行客户端验证。 当通用处理程序(.ashx)而不是Web表单(.aspx)处理AJAX请求时,是否可能(以及如何)使用ASP.NET 4.5验证控件?

以下是一些让我的问题更清晰的代码。我希望能够做到这样的事情:

HTML

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" 

Inherits="Test" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-2.1.3.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <input type="text" id="Name1" />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
        <asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="validateName1" ControlToValidate="Name1"  OnServerValidate="Name1_ServerValidate">*</asp:CustomValidator>
<br /> 
        <input type="file" multiple="multiple" style="width: 195px;" />
<br /> 
        <input type="button" id="btnSendEmail" value="Send" />
    </form>
</body>
</html>

的JavaScript

$.ajax({
            url: "TestAjaxHandler.ashx",
            type: "POST",
            ...
        })

TestAjaxHandler.ashx

public class TestAjaxHandler : IHttpHandler {

public void ProcessRequest (HttpContext context) {

}

protected void Name1_ServerValidate(object source, ServerValidateEventArgs args {
    // Here goes validation logic
} 

public bool IsReusable {
    get {
        return false;
    }
}

}

1 个答案:

答案 0 :(得分:0)

你“不能”使用CustomValidator执行此操作,因为它的ClientValidationFunction不支持AJAX。 jQuery支持创建同步请求(https://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings async),但在大多数情况下,您不希望这样做。

我认为最好的选择是编写自己的验证控件或使用带有验证属性的jQuery验证插件进行服务器验证。