繁体   English   中英

无法使用 AJAX 将 json 或文本发送到 C# bhind-code

[英]cannot send json or text to C# bhind-code using AJAX

我有一个 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 代码,它运行良好,但在这里我没有找到错误所在,所以有什么建议吗?

我想对你有帮助。

class Item 
{
    public int id { get; set; }
}

[WebMethod]
public static void GetSearchCritetrion(Item selectedItem)
{
    //ToDo: selectedItem.id
}

看看这是否有效而不是发送对象尝试作为字符串传递

data: JSON.stringify({selectedItem : sCriterion }),

背后的代码

public void GetSearchCritetrion(string selectedItem)

这是一个非常简单的示例,它将 JSON 发布到控制器方法,该方法将其转换为对象,然后返回响应。

HTML:

<button id="go" class="btn">Go</button>

JS:

    var obj = { foo: 123, bar: "abc " };
    $('#go').click(function () {
        $.ajax({
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            type: 'POST',
            url: '/Test/TestJson',
            data: JSON.stringify(obj),
            success: function (response) {
                alert(response.result)
            },
            failure: function (response) {
                alert('fail');
            }
        });

    });

控制器:

public class TestController : Controller
{
    [OutputCache(Location = OutputCacheLocation.None)]
    public JsonResult TestJson(TestClass tc)
    {
        return Json(new { result = "foo=" + tc.foo + " bar=" + tc.bar }, JsonRequestBehavior.AllowGet);
    }

    public class TestClass
    {
        public int foo { get; set; }
        public string bar { get; set; }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM