0

网格没有显示任何值,我可以看到代码隐藏文件中打印的 JSON 值。请找到下面列出的 JS 代码和 CodeBehind -

    $(document).ready(function () {

        alert("Page Load1");
        createUserGrid();
        alert("Page Load2");

    });

    function createUserGrid() {
        alert("call webservice");
        $("#tblJQGrid").jqGrid({
            url: '/POWeb.asmx/GetPOCores?strPoNo=411101',
            datatype: 'json',
            mtype: 'GET',
            loadonce: true,
            gridview: true,
            autoencode: true,
            height:"auto",
            colNames: ['Number', 'Name', 'Notes'],
            colModel: [
                { name: 'id', index: 'id', width: 60, editable: true, editoptions: { readonly: true }, sorttype: "string" },
                { name: 'name', index: 'name', width: 100, sorttype: "string", editable: true },
                { name: 'note', index: 'note', width: 150, sortable: false, editable: true }
            ],
            jsonReader: {
                repeatitems: false,
                root: function (obj) { return obj.d; }
            },
            ajaxGridOptions: { contentType: "application/json; charset=utf-8" },

            rowNum: 1,
            rowList: [1, 2, 3],
            pager: '#divPager',
            editurl: 'SaveEdit.aspx',
            caption: "Users Data",
            serializeGridData: function (postData) {
                return JSON.stringify(postData);
            }
        });

    }
</script>

下面是我的 CodeBehind 文件

namespace MenuCheck
{
/// <summary>
/// Summary description for POWeb
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class POWeb : System.Web.Services.WebService
{

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

    [WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]

    public List<POItems> GetPOCores(string strPoNo)
    {
        //string strPoNo = "411101";
        System.Diagnostics.Debug.WriteLine(" In Web Method");

        List<POItems> result = null;
        DB dbobj = new DB();
        result = dbobj.getPOItems(strPoNo, 0);

        return result;
    }
}
4

1 回答 1

1

ASMX 模型允许返回序列化为 XML 或 JSON 的对象。.NET 框架为您进行序列化。所以JavaScriptSerializer.Serialize手动调用是错误的。该方法GetPOCores应返回表示所需数据而不是字符串的对象。

所以你应该做的是像这样声明类

public class MyItem {
    public int id { get; set; }
    public string name { get; set; }
    public string note { get; set; }
}

(名称的确切类型可能取决于您的数据)。您可以将 Web 方法的签名更改GetPOCores

public List<MyItem> GetPOCores(string strPoNo)

并调整其代码以返回List<MyItem>而无需任何手动序列化。

您应该添加loadonce: true选项,因为您没有在服务器端实现数据分页。我建议您添加其他gridview: true, autoencode: true选项并考虑删除width选项并使用height: "auto". 在这种情况下,网格宽度将是width所有列的值的总和colModel。此外,您需要jsonReader在 jqGrid 中包含以下选项:

jsonReader: {
    repeatitems: false,
    root: function (obj) { return obj.d; }
}

添加

ajaxGridOptions: { contentType: "application/json; charset=utf-8" }

serializeGridData: function (postData) {
    return JSON.stringify(postData);
}
于 2013-07-08T06:40:30.217 回答