ASP.NET jQuery Ajax调用代码隐藏方法

本文关键字:代码 隐藏 方法 调用 Ajax NET jQuery ASP | 更新日期: 2023-09-27 18:27:37

我是非常的web开发新手,但总体上有很多开发经验。我有一个ASP页面,它有几个输入字段和一个提交按钮。这个提交按钮纯粹调用$.ajax,我打算让它调用代码隐藏文件中的一个方法。然而,我注意到了两件有趣的事情。首先,无论向ajax调用提供什么数据,它都会成功。其次,responseText字段是整个页面的html源。

我读过这篇文章和其他指向webconfig的文章,但这些解决方案似乎并不能解决我的问题。

这是asp页面:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script src="TesScript.js"></script>
    <link rel="Stylesheet" type="text/css" href="TestStyle.css" />
</head>
<body>
    <div>
        <ul class="tempList">
            <li>Name:
                <input id="nameText" type="text" />
            </li>
            <li>Attending:
                <input id="yesButton" type="radio" name="attending" />
                Yes
                <input id="noButton" type="radio" name="attending" />
                No </li>
            <li>Return Address:
                <input id="returnAddressText" type="text" />
            </li>
            <li>
                <input id="submitButton" type="button" onclick="submit()" value="Submit" />
            </li>
        </ul>
    </div>
    <ul id="errorContainer" class="errorSection" runat="server" />
    <ul id="messageContainer" class="messageSection" runat="server" />
</body>
</html>

背后的代码:

using System;
using System.Web.Services;
using System.Web.UI;
namespace TestAspStuff
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        [WebMethod]
        public static string OnSubmit(string name, bool isGoing, string returnAddress)
        {
            return "it worked";
        }
    }
}

以及JavaScript:

function submit() {
    var name = "my name";
    var isAttending = true;
    var returnAddress = "myEmail@gmail.com";
    SendMail(name, isAttending, returnAddress);
}
function SendMail(person, isAttending, returnEmail) {
    var dataValue = { "name": person, "isGoing": isAttending, "returnAddress": returnEmail };
    $.ajax({
        type: "POST",
        url: "Default.aspx/OnSubmit",
        data: dataValue,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Request: " + XMLHttpRequest.toString() + "'n'nStatus: " + textStatus + "'n'nError: " + errorThrown);
        },
        complete: function (jqXHR, status) {
            alert("complete: " + status + "'n'nResponse: " + jqXHR.responseText);
        }
    });
}

现在,我注意到我可以将url属性更改为我想要的任何内容,并且从不调用error方法,状态为成功,responseText是整个html页面。我的webconfig有所有适当的部分(包括htmlModule部分)。我在.Net 3.5工作。我很感激任何帮助,再说一次,我真的是新手,所以别人显而易见的东西对我来说很可能不是显而易见的。如果有更好的方法(从JavaScript调用asp.net代码背后的方法),请随时发布。谢谢

ASP.NET jQuery Ajax调用代码隐藏方法

首先,您可能想要添加一个return false;到JavaScript中Submit()方法的底部(因此它会停止提交,因为您是在AJAX中处理它的)。

您连接的是完成事件,而不是成功活动-这是一个显著的差异,这就是为什么您的调试结果不如预期的原因。此外,我从未使签名方法与您的方法相匹配,而且我一直提供contentType和dataType。例如:

$.ajax({
        type: "POST",
        url: "Default.aspx/OnSubmit",
        data: dataValue,                
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Request: " + XMLHttpRequest.toString() + "'n'nStatus: " + textStatus + "'n'nError: " + errorThrown);
        },
        success: function (result) {
            alert("We returned: " + result);
        }
    });

这也没有解决我的问题,所以我稍微更改了参数
这个代码对我有效:

var dataValue = "{ name: 'person', isGoing: 'true', returnAddress: 'returnEmail' }";
$.ajax({
    type: "POST",
    url: "Default.aspx/OnSubmit",
    data: dataValue,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert("Request: " + XMLHttpRequest.toString() + "'n'nStatus: " + textStatus + "'n'nError: " + errorThrown);
    },
    success: function (result) {
        alert("We returned: " + result.d);
    }
});

我知道这是一个旧线程。一种可能的解决方案是使用JSON.stringify( )将其转换为适当的JSON字符串。这将解决任何与数据参数值相关的问题。

function SendMail(person, isAttending, returnEmail) {
    var dataValue = { "name": person, "isGoing": isAttending, "returnAddress": returnEmail };
    $.ajax({
        type: "POST",
        url: "Default.aspx/OnSubmit",
        data: JSON.stringify(dataValue),
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Request: " + XMLHttpRequest.toString() + "'n'nStatus: " + textStatus + "'n'nError: " + errorThrown);
        },
        complete: function (jqXHR, status) {
            alert("complete: " + status + "'n'nResponse: " + jqXHR.responseText);
        }
    });
}