3

KendoUi Grid をコントローラーからの Json データにバインドしようとしているときに、特定の問題に直面しています。問題ないようで、私の Json オブジェクトにはデータが含まれていますが、まだグリッドには何も表示されていません。

そして、Chrome JavaScript コンソールで次のエラーが発生します。

GET http://localhost:8084/Records?take=5&skip=0&page=1&pageSize=5 500 (Internal Server Error) 

View

<div id="grid">
</div>
<div>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#grid").kendoGrid({
                dataSource: {
                    type: "json",
                    serverPaging: true,
                    pageSize: 5,
                    groupable: true,
                    selectable: "row",
                    transport: { read: { url: "Records", dataType: "json"} }
                },
                height: 400,
                scrollable: true,
                sortable: true,
                filterable: true,
                pageable: true,
                columns: [
                        { field: "No", title: "No" },
                        { field: "Desc", title: "Description" },
                        { field: "priority", title: "Priority" },
                        { field: "decision", title: "Decision" }
                    ],
                dataBound: function () {
                    this.expandRow(this.tbody.find("tr.k-master-row").first());
                }
            });
        });
    </script>

Controller

    public ActionResult GetRecords()
    {
       var obj = new User();
        var jsnRslt = obj.GetResult(Session["id"].ToString());
//return Json(jsnRslt);

        return Json(jsnRslt, JsonRequestBehavior.AllowGet); //Changed as suggested by Dismissile
    }

Model

public object GetResult(string usrId)
    {
…
….
…..            try
        {
            int i = 0;
            if (rcrds != null || rcrds.HasRows)
            {
                jsonWriter.WriteStartObject();
                while (rcrds.Read())
                {
                    for (int j = 0; j < rcrds.FieldCount; j++)
                    {
jsonWriter.WritePropertyName(rcrds.GetName(j));
jsonWriter.WriteValue(rcrds.GetValue(j));
                    }
                    i++;
                }
                jsonWriter.WriteEndObject();
            }

        }

        catch (Exception ex) { }
        return jsonWriter;
    }
}

親切に助けてください。

4

5 に答える 5

1

おそらく、JSON 呼び出しでこれが必要になります。

return Json(jsnRslt, JsonRequestBehavor.AllowGet);

GET 呼び出しを行っているようですが、デフォルトでは GET は JSON 呼び出しでは許可されていません。

于 2013-03-25T14:52:08.233 に答える
1

次のように、dataSource 内で transport 属性を使用してみてください。

 <script type="text/javascript">



    var dataSource = new kendo.data.DataSource({
        batch: true,
        schema: {
            model: {
                id: "EmployeeID",
                fields: {
                    EmployeeID: { editable: true, validation: { required: true } },
                    EmployeeName: { validation: { required: true } }

                }
            }
        },
        transport: {
            read: {
                url: "/Home/GetData",
                type: "GET"

            },
            update: {
                url: "/Home/Update",
                type: "POST",
                contentType: 'application/json'


            },
            destroy: {
                url: "/Home/Destroy",
                type: "POST",
                contentType: 'application/json'

            },


            create: {
                url: "/Home/Create",
                type: "POST",
                contentType: 'application/json'

            },


            pageSize: 1,





            parameterMap: function (options, operation) {
                if (operation !== "read" && options.models) {
                    return kendo.stringify(options.models) ;
                }
            }

        }




    });





    $(document).ready(function () {


        $("#grid").kendoGrid({
            dataSource: dataSource,
            navigatable: true,
            pageable: true,
            height: 430,
            sortable: true,
            toolbar: ["create", "save", "cancel"],
            columns: [

                { field: "EmployeeID", title: "Employee ID", width: 110 },
                { field: "EmployeeName", title: "Employee Name", width: 110 },

                { command: "destroy", title: "Delete", width: 90 }],
            editable: true,
            selectable: "multiple row",
            groupable: true,
            navigatable: true,
            filterable: true
        });
    });



</script>

コントローラー:

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        var employee = new Employee().GetEmployeeList();

        return View(employee);
    }

    [AcceptVerbs(HttpVerbs.Get)]
    public JsonResult GetData()
    {
        var obj = new Employee();


        return Json(obj.GetEmployeeList(), JsonRequestBehavior.AllowGet);
    }

    [HttpPost]
    public JsonResult Update(List<Employee> model)
    {
        var obj = new Employee();

        //return View();
        return Json(obj);
    }

    [HttpPost]
    public JsonResult Create(List<Employee> model)
    {
        var obj = new Employee();

        return Json(obj);
    }

    public ActionResult Destroy(Employee model)
    {
        return View();
    }

}

index メソッドから html ビューを返し、グリッドを保持します &

于 2013-08-14T09:00:30.213 に答える
0

ActionMethod Parmにデータソースリクエストも追加する必要があると思います

 public ActionResult GetResult([DatasourceRequest]request, string usrId)
 return Json(jsnRslt.ToDatasourceResult(request), JsonRequestBehavior.AllowGet);

すべてのケンドグリッドにはこれが必要です

于 2013-03-27T15:41:43.793 に答える