通过$ .ajax()发送的C#方法未收到数据

时间:2015-04-09 13:22:32

标签: c# ajax

我使用{{1}从脚本发送一个复杂的字符串(它是style属性,IDlabel text的组合}。我在类似的问题上经历了几个问题。但也许我无法理解我在哪里弄错了。

这是我正在使用的脚本:

$.ajax()

在C#中,我通过以下方式访问它:

    $(".btnSaveStyle").click(function (e) {
        var comp1Style = "";
        var comp2Style = "";

        $(".box").children(".comp1").each(function () {
            var style = $(this).attr('style');
            var title = $(this).text();
            var componentClass = $(this).attr('class');
            comp1Style = comp1Style + style + "#" + componentClass + "#" + title + "$";
        });
        alert(comp1Style); //I get the style here

        $.ajax({
            type: "POST",
            async: true,
            url: 'AjaxRecieveStyle.aspx/GetStyle',
            data: comp1Style
        });

现在

1):我应该使用JSON对象传递数据吗?

2):请告诉我这里我做错了什么?

3 个答案:

答案 0 :(得分:1)

1)是的,最好使用JSON发送数据 - 我的意思是,当一个人从现在开始查看该代码时,会更容易理解发生了什么。而且基于JSON扩展协议也更容易。

2)我建议你在GetStyle(字符串样式)方法的最开头添加日志记录。然后请尝试通过在浏览器中明确键入URL来实现它(或者更好地使用PostMan - 请参阅下面的链接,PostMan将帮助您测试POST请求,因为我看到您有POST请求)并确保网络-server代码有效。

只有当它工作时,请尝试您的前端AJAX请求。

我认为您没有在WebAPI中正确处理POST请求。它只会处理GET请求。有关详细信息,请查看此SO问题:Simple post to Web Api

3)链接到PostMan:https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en

答案 1 :(得分:0)

进行了一些挖掘并想出了这个链接:http://www.aspsnippets.com/Articles/Calling-ASPNet-WebMethod-using-jQuery-AJAX.aspx

网站上的源代码显示您可能缺少ajax调用中的一些主要功能:

function ShowCurrentTime() {
    $.ajax({
        type: "POST",
        url: "Default.aspx/GetCurrentTime",
        data: '{name: "' + $("#<%=txtUserName.ClientID%>")[0].value + '" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: OnSuccess,
        failure: function(response) {
            alert(response.d);
        }
    });
}

虽然这显然是针对他们的示例,但您会看到他们设置了以下不是

的属性
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function(response) {
                alert(response.d);
        }

虽然成功和失败属性绝对是可选的,但我相信设置您的内容类型和数据类型会对您有所帮助。

答案 2 :(得分:0)

我将脚本更改为以下内容:

      $.ajax({
                type: "POST",
                async: true,
                url: 'AjaxRecieveStyle.aspx',
                data: { style: comp1Style } //as I want to pass the parameter 'style' which is internally a JSON array.
            });

我通过以下方式在C#中获取变量 style (without using [WebServices])

我写了一个方法GetStyle(string style)来获取从ajax调用发送的数据。

注意:我从我的脚本中调用 AjaxRecieveStyle/GetStyle ,因为我的C#方法无法访问该方法。实际上,数据来自 Page_Load 方法。

我使用 Request.Params["style"]

访问脚本发送的变量

我的C#方法是:

protected void Page_Load(object sender, EventArgs e)
    {
        GetStyle(Request.Params["style"]);
    }

    protected void GetStyle(string style)
    {
        var recievedStyle = style;
        //do something on the recieved data!
    }

对于那些不想实际发送JSON数据的人来说,这将是另一种选择!但是使用JSON格式发送数据会增加代码的 可读性 ..