0

我在 ASP.Net Webforms 应用程序中实现 jQuery bootgrid 时遇到了问题。

我在页面加载时遇到以下问题,这会阻止引导网格加载数据:

未捕获的语法错误:位置 4 的 JSON 中的意外标记 <

    在 Function.parse [as parseJSON] ()

        在 Object.success (jquery.bootgrid.js:232)

        着火(jquery-3.1.1.js:3305)

        在 Object.fireWith [as resolveWith] (jquery-3.1.1.js:3435)

        完成后(jquery-3.1.1.js:9242)

        在 XMLHttpRequest。

这是我在 JavaScript 中的 bootgrid 实现:

$("#grid").bootgrid({
    ajax: true,
    url: "/Secure/Maintenance/Roles.aspx/GetData",
    rowCount: [10, 50, 75, 100, 200, -1]
})

然后这是我的 C# WebMethod

[WebMethod]
public static string GetData()
{
    var results = (from x in EFDB.AspNetRoles
                   select x).AsQueryable();

    return JsonConvert.SerializeObject(results);
}

我使用 LINQ 查询来获取数据并尝试将其转换为 JSON,但我不确定我是否正确执行。当我在GetData方法中设置断点时,它们都没有到达。所以我真的很难调试这个。

关于我可能做错的任何建议?

谢谢!

4

3 回答 3

0

删除 .AsQueryable(),因为您要发送此结果进行序列化。

[WebMethod]
protected static string GetData()
{
    var results = (from x in EFDB.AspNetRoles
                   select new 
                   {
                     Id= x.Id,
                     Name = x.Name
                   });

    return JsonConvert.SerializeObject(results.ToArray());
}
于 2017-03-17T09:21:15.607 回答
0

我最终创建了一个Generic Handler来发布数据并且效果很好。这是完整的代码Generic Handler

public class RolesHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/json";
        context.Response.Write(GetData());
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public string GetData()
    {
        var result = string.Empty;
        var con = new SqlConnection();
        var cmd = new SqlCommand();
        var dt = new DataTable();
        string sSQL = @"SELECT Id, Name
                        FROM dbo.AspNetRoles;";

        try
        {
            using (var connection = THF.Models.SQLConnectionManager.GetConnection())
            {
                using (var command = new SqlCommand(sSQL, connection))
                {
                    connection.Open();
                    command.CommandTimeout = 0;
                    var da = new SqlDataAdapter(command);
                    da.Fill(dt);
                }
            }

            var sNumRows = dt.Rows.Count.ToString();
            var sDT = JsonConvert.SerializeObject(dt);
            result = "{ \"current\": 1, \"rowCount\": 10, \"rows\": " + sDT + ", \"total\": " + sNumRows + " }";
        }
        catch (Exception ex)
        {
        }
        finally
        {
            cmd.Dispose();
            THF.Models.SQLConnectionManager.CloseConn(con);
        }

        return result;
    }
于 2017-03-18T16:07:17.713 回答
0

我的问题是:我使用的是 CompleteRequest 而不是 Response.End (为了避免线程中止异常):

    Response.Clear();
    Response.Write(Converter.ToJson(resObj));
    HttpContext.Current.ApplicationInstance.CompleteRequest(); // seems to cause the problem

所以我用下面的代码替换了我的代码,令人惊讶的是,它起作用了。

    try
    {
        Response.Clear();
        Response.Write(Converter.ToJson(resObj));
        Response.End();
    }
    catch (System.Threading.ThreadAbortException tae)
    {
        // ignore
    }
于 2017-04-07T07:19:43.883 回答