【问题标题】:$.ajax is not working with ASP.NET$.ajax 不适用于 ASP.NET
【发布时间】:2017-11-07 12:27:22
【问题描述】:

我正在尝试调用 $.ajax 方法以根据搜索条件检索 NORTHWND 员工详细信息。但是,出于某种原因,countrytitle 变量总是返回null。我不明白我在哪里做错了。

下面是清晰的解释。

下面是AjaxDemoRequestPage.aspx中的代码

<form id="form1" runat="server">
        <div>
            Country:
            <asp:TextBox ID="txtCountry" runat="server"></asp:TextBox>
            Title:
            <asp:TextBox ID="txtTitle" runat="server"></asp:TextBox>
            <asp:Button ID="btnAjax" runat="server" Text="$.ajax()" />
            <div id="container"></div>
        </div>
        <script src="Scripts/jquery-3.2.1.min.js"></script>
        <script type="text/javascript">
            $(function () {
                $("#btnAjax").click(function (evt) {
                    var data = {};
                    data.country = $("#txtCountry").val();
                    data.title = $("#txtTitle").val();
                    debugger;
                    $.ajax({
                        url: "PostTarget.aspx",
                        type: "POST",
                        data: data,
                        contentType: "x-www-form-urlencoded;charset=UTF-8",
                        dataType: "json",
                        success: SuccessfulAjaxResponse,
                        error: ErroticAjaxResponse
                    });
                    evt.preventDefault();
                });
            });
            function SuccessfulAjaxResponse(results, status, jqXHR) {
                $("#container").empty();
                debugger;
                for (var i = 0; i < results.length; i++) {
                    $("#container").append("<tr>" +
                        "<td>" + results[i].EmployeeID + "</td>" +
                        "<td>" + results[i].FirstName + "</td>" +
                        "<td>" + results[i].LastName + "</td>"
                        );
                }
            }

            function ErroticAjaxResponse(jqXHR, status, error) {
                alert("Error: " + error);
            }
        </script>
    </form>

下面是PostTarget.aspx.cs 页面中的代码。在这个页面中,调试时我总是得到country,而titlenull

public partial class PostTarget : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var country = Request.Form["country"];
        var title = Request.Form["title"];
        var db = new NORTHWNDEntities();
        var emps = db.Employees
            .Where(x => x.Country.Contains(country) || x.Title.Contains(title))
            .Select(x => new EmployeeSearchResult
        {
            EmployeeID = x.EmployeeID,
            FirstName = x.FirstName,
            LastName = x.LastName
        });
        Response.Clear();
        Response.Write(JsonConvert.SerializeObject(emps));
        Response.Flush();
        Response.End();
    }
}

谁能告诉我哪里做错了?

【问题讨论】:

  • 您的 ajax 请求没有调用任何函数。顺便说一句,调用的函数应该是static并标记为[WebMethod]
  • @BadMiscuit:无论你说什么都不是强制性的。它们只是另一种方式。我们可以按照我遵循的方法来做。
  • "is not working" 告诉我们几乎没有任何价值。错误处理程序告诉你什么?您至少应该提供相关的调试信息。
  • 问题是内容类型

标签: c# jquery asp.net ajax asp.net-ajax


【解决方案1】:

contentType 应该是这样的:

contentType: "application/x-www-form-urlencoded;charset=UTF-8",

【讨论】:

【解决方案2】:

我的错误是我从未调用过$.ajax 方法。以下是修改后的工作代码。

<form id="form1" runat="server">
        <div>
            Country:
            <asp:TextBox ID="txtCountry" runat="server"></asp:TextBox>
            Title:
             <asp:TextBox ID="txtTitle" runat="server"></asp:TextBox> 

            <!-- <asp:Button ID="btnAjax" runat="server" Text="$.ajax()" />-->
            <input type="button" id="btnAjax" value="$.ajax()"/>

            <div id="container"></div>
        </div>
        <script src="Scripts/jquery-3.2.1.min.js"></script>
        <script type="text/javascript">
            $(function () {
                $("#btnAjax").click(function (evt) {
                    var data = {};
                    data.country =document.getElementById('<%= txtCountry.ClientID %>').value;
                    data.title = document.getElementById('<%= txtTitle.ClientID %>').value;
                    debugger;
                    $.ajax({
                        url: "PostTarget.aspx",
                        type: "POST",
                        data: data,
                        contentType: "x-www-form-urlencoded;charset=UTF-8",
                        dataType: "json",
                        success: SuccessfulAjaxResponse,
                        error: ErroticAjaxResponse
                    });
                    $.ajax(data);
                    evt.preventDefault();
                });
            });
            function SuccessfulAjaxResponse(results, status, jqXHR) {
                $("#container").empty();
                debugger;
                for (var i = 0; i < results.length; i++) {
                    $("#container").append("<tr>" +
                        "<td>" + results[i].EmployeeID + "</td>" +
                        "<td>" + results[i].FirstName + "</td>" +
                        "<td>" + results[i].LastName + "</td>"
                        );
                }
            }

            function ErroticAjaxResponse(jqXHR, status, error) {
                alert("Error: " + error);
            }
        </script>
    </form>

【讨论】:

    【解决方案3】:

    由 ASP.NET 生成的ID 与您给出的不同。这就是你得到空值的原因。

    您可以通过这种方式在javascript中访问ASP.NET控件。

    document.getElementById('<%= txtCountry.ClientID %>').value
    

    您也可以简单地使用 html 按钮而不是 ASP.NET 按钮来发出 ajax 请求。

    这是您的更新代码。

    <form id="form1" runat="server">
            <div>
                Country:
                <asp:TextBox ID="txtCountry" runat="server"></asp:TextBox>
                Title:
                 <asp:TextBox ID="txtTitle" runat="server"></asp:TextBox> 
    
                <!-- <asp:Button ID="btnAjax" runat="server" Text="$.ajax()" />-->
                <input type="button" id="btnAjax" value="$.ajax()"/>
    
                <div id="container"></div>
            </div>
            <script src="Scripts/jquery-3.2.1.min.js"></script>
            <script type="text/javascript">
                $(function () {
                    $("#btnAjax").click(function (evt) {
                        var data = {};
                        data.country =document.getElementById('<%= txtCountry.ClientID %>').value;
                        data.title = document.getElementById('<%= txtTitle.ClientID %>').value;
                        debugger;
                        $.ajax({
                            url: "PostTarget.aspx",
                            type: "POST",
                            data: data,
                            contentType: "x-www-form-urlencoded;charset=UTF-8",
                            dataType: "json",
                            success: SuccessfulAjaxResponse,
                            error: ErroticAjaxResponse
                        });
                        evt.preventDefault();
                    });
                });
                function SuccessfulAjaxResponse(results, status, jqXHR) {
                    $("#container").empty();
                    debugger;
                    for (var i = 0; i < results.length; i++) {
                        $("#container").append("<tr>" +
                            "<td>" + results[i].EmployeeID + "</td>" +
                            "<td>" + results[i].FirstName + "</td>" +
                            "<td>" + results[i].LastName + "</td>"
                            );
                    }
                }
    
                function ErroticAjaxResponse(jqXHR, status, error) {
                    alert("Error: " + error);
                }
            </script>
        </form>
    

    【讨论】:

    • 你试过这个程序执行吗?请您试一次,我猜您的程序将无法运行。
    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2014-11-16
    相关资源
    最近更新 更多