【问题标题】:unable to pass data to c# code using AJAX无法使用 AJAX 将数据传递给 c# 代码
【发布时间】:2016-10-09 10:53:12
【问题描述】:

我正在尝试使用 AJAX 代码将一些特定数据传递给 C# 代码隐藏,但无法完成。我尝试过使用纯文本数据类型和 json 格式,但它们都不适合我。

我尝试使用json方法发送数据时出现以下错误:

内部服务器错误

使用文本方法时,没有出现错误,代码是通过success函数来的,但实际上数据并没有发送到代码隐藏类的方法中

这是使用json格式的ajax代码:

function searchClicked(sCriterion) {
$.ajax({
    type: "POST",
    url: "TokenRegistration.aspx/GetSearchCritetrion",
    data: "{creiterion : " + sCriterion + " }",
    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);
    }
});

}

这是使用文本格式的ajax代码:

function searchClicked(sCriterion) {
    $.ajax({
        type: "POST",
        url: "TokenRegistration.aspx/GetSearchCritetrion",
        data: sCriterion,
        contentType: "application/text; charset=utf-8",
        dataType: "text",
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
        },
        success: function (result) {
            alert("We returned: " + result);
        }
    });
}

这也是数据应该发送到的我的代码隐藏方法:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void GetSearchCritetrion(object selectedItem)
{
    var json = new JavaScriptSerializer();
    var data = json.Deserialize<Dictionary<string, Dictionary<string, string>>[]>(selectedItem.ToString());
}

我在另一个项目中使用了完全相同的 ajax 代码,它运行良好,但在这里我没有得到错误所在,所以请给点建议?

【问题讨论】:

  • 控件是否达到GetSearchCritetrion()动作方法?
  • 不,亲爱的,它没有达到那种方法,@Kumar_Vikas
  • 为什么需要object selectedItem?你可以通过 SelectedItem 代替吗?还是字符串还是类?
  • 它应该是与.aspx.cs文件一起使用的静态方法
  • @JericCruz 我已经将其更改为string,但仍然出现相同的错误

标签: javascript c# jquery json ajax


【解决方案1】:

像这样替换你的代码

.aspx

<script>
        $(function () {
            function searchClicked(sCriterion) {
                $.ajax({
                    type: "POST",
                    url: "Default.aspx/GetSearchCritetrion",
                    data: "{creiterion : " + sCriterion + " }",
                    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);
                    }
                });
            }

            searchClicked("1");


        });

        </script>

和.cs文件

[WebMethod]
    public static String GetSearchCritetrion(String creiterion)
    {
        return "ok";
    }

和 App_Start

 public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Off;//Its may cause the error
            routes.EnableFriendlyUrls(settings);
        }
    }

【讨论】:

  • 谢谢亲爱的,但是在我的项目中我没有名为:App_Start 的文件,我按照你提到的那样更改了其余部分,但仍然出现相同的错误
  • 您是否将 .aspx.cs 文件的参数转换为字符串并将 ajax 代码放入 jquery 加载的部分..这在我的机器上运行良好。
  • 请注意,当我将代码放入 jquery 加载部分时,代码不再通过这些函数。
【解决方案2】:

在您的客户端:

function searchClicked(sCriterion) {
    //display the parameter
    console.log(sCriterion);

    if(sCriterion != "" || sCriterion != null)
    {
        var param= {
            "selectedItem" : sCriterion 
         };

        $.ajax({
            type: "POST",
            url: "TokenRegistration.aspx/GetSearchCritetrion",
            data: param,
            success: function(result) {
              alert("We returned: " + result);
             },
             error: function(error){
                 console.log(error);
             }
        });
    }
    else
    {
        alert("No values!!");
    }
}

服务器端:

[WebMethod]
public void GetSearchCritetrion(string selectedItem)
{
    //add a breakpoint here....

}

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多