ajax调用不在asp.net中发布json数据

时间:2013-11-19 18:50:40

标签: asp.net json asp.net-ajax

尝试使用jquery ajax调用将一些JSON数据发送到服务器。它似乎不是数据发布,因为当我尝试在代码隐藏文件中解析它时会抛出错误。搜索周围,但答案没有帮助解决我的问题。任何指导都将不胜感激。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript">

    $.ajax({
        url: 'Default2.aspx',
        type: 'post',
        async: false,
        contentType: 'application/json; charset=utf-8',
        //data: "'"+batchtable+"'",
        data: JSON.stringify({"a":"1", "b": "2"}),
        dataType: 'json',
        processData: false,
        success: function (result) {
            alert('success');
        },
        error: function (result) {
            alert('failed');
        }
    });

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </div>
    </form>
</body>
</html>

这是.cs文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Diagnostics;
using System.Web.Script.Serialization;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {


    }


    protected void Button1_Click(object sender, EventArgs e)
    {
        var jsonString = String.Empty;
        HttpContext context = HttpContext.Current;
        context.Request.InputStream.Position = 0;
        using (var inputStream = new StreamReader(context.Request.InputStream))
        {
            jsonString = inputStream.ReadToEnd();
        }

        RootObject userinput = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<RootObject>(jsonString);

    }
}

public class RootObject
{
    public string a { get; set; }
    public string b { get; set; }
}

我得到的错误信息是:

Invalid JSON primitive: __VIEWSTATE.

2 个答案:

答案 0 :(得分:2)

对于ajax调用不要从服务器端调用event.you需要从javascript / jquery调用。

你需要定义一个服务器端webmethod,你可以从jquery / javascript调用该方法。这是一个演示。工作良好。可能对你有帮助。

 <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
 <script language="javascript" type="text/javascript">
     $(document).ready(function () {
         $("#btnResult").click(function () {
             var name = $("#txtNameTextBox").val();
             $.ajax({
                 type: "POST",
                 url: "Default.aspx/GetDate",
                 data: "{name:'" + name + "'}",
                 contentType: "application/json; charset=utf-8",
                 dataType: "json",
                 success: function (data) {
                     //alert(data.d);
                     $("#Result").text(data.d);

                     var val = data.d;
                     val = val.split("~");
                     var name = val[0];
                     var time = val[1];
                     var date = val[2];
                     var tempdate = date.split(":");
                     var finaldate = tempdate[1];
                     $("#txtDateToDisplay").val(finaldate);
                     $("#txtDateToDisplay2").val(finaldate);
                 },
                 error: function () { alert(arguments[2]); }
             });
         });

     });
 </script>

这是HTML

<h2>
    Call Server side Function From JaxaScript AJAX Call ASP.NET!
</h2>
<br />
<br />
<div>
  Name  : <input type="text" id="txtNameTextBox" /><br/><br/>
  Date  : <input type="text" id="txtDateToDisplay" /><br/><br/>
  Date  : <input type="text" id="txtDateToDisplay2" />
  <br />
  <br />
  <p id="Result">Message : </p>
 <input type="button" id="btnResult" value="Click here for the time"/>
</div>

这是您的服务器端代码

     /// <summary>
    /// ===========================================
    /// This is the WebMethod where ajax call happens.
    //=============================================
    /// </summary>
    /// <param name="name">the data sent from ajax call 
    /// - here a string only(name of a user)</param>
    /// <returns>a string with json format</returns>

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static string GetDate(string name)
    {
        if (name == "")
        {
            return "No Parcel Available";
        }
        else
        {
            name = "Name : " + name + "~" +
                    "Current Time : " + DateTime.Now.ToLongTimeString()
                    + "~" + "Date : " + DateTime.Now.ToShortDateString();
        }

       return name;
    }

希望它会对你有所帮助。

答案 1 :(得分:1)

您需要使用JavaScript / jQuery来调用服务器端端点。 ASP.NET AJAX页面方法提供托管在页面内部的Web方法,但是static并且不是页面实例的一部分,因此您可以通过客户端脚本异步调用它们,如下所示: / p>

标记:

<div id="Results"></div>

$(document).ready(function() {
    $.ajax({
        type: "POST",
        url: "YourPage.aspx/GetGreeting",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result) {
            // Put greeting into DIV
            $('#Results').text(result.d);
        }
    });
});

代码隐藏:

[WebMethod]
public static string GetGreeting()
{
    return "Hello world!";
}

注意:上面的示例使用客户端(通过jQuery)向服务器询问问候语(string),该问候语由ASP.NET AJAX页面方法自动进行JSON编码。然后{j} result函数的success处理程序处理.ajax(),并从返回的string引用中提取实际的.d值{1}}对象。