从MVC控制器以编辑形式填充jqGrid选择列表

时间:2015-07-09 22:48:21

标签: jquery jqgrid

我从控制器返回一个字符串jqGrid,但下拉列表没有填充。

View上的网格代码:

        {
            name: 'FundCode', index: 'FundCode', editable: true, edittype: "select",
            editoptions: {
                dataUrl: '@Url.Action("PopulateDdl", "FundCode")'
            },
            buildSelect: function (response) {
                var data = typeof response === "string" ? $.parseJSON(response.responseText) : response, s = "<select>";

                s += '<option value="0">--Select Fund--</option>';

                $.each(data, function() {
                    s += '<option value="' + data + '">' + data + '</option>';

                })
            }
        }

返回字符串的控制器方法:

    [HttpGet]
    public JsonResult PopulateDdl()
    {
        var fundCodes = repo.GetFundCodes();

        var codeList = new List<string>();

        foreach (var t in fundCodes)
        {
            codeList.Add(t.FundCode.ToString());
        }

        return Json(codeList, JsonRequestBehavior.AllowGet);
    }

这会返回一个列表到网格,但是我收到一个错误,“语法错误,无法识别的表达式:[”1“,”2“,”3“等]

我也试过将MVC SelectListItem作为相同的结果返回。

更新 - 我添加了结束选择。它没有解决问题。然后我注意到'buildSelect'与dataUrl不在同一组中。我移动它,错误改变了。现在错误是“Unexpected token u”,它说它在第1行。

新视图代码:

        {
            name: 'FundCode', index: 'FundCode', editable: true, edittype: "select",
            editoptions: {
                dataUrl: '@Url.Action("PopulateDdl", "FundCode")',
                buildSelect: function (response) {
                    var data = typeof response === "string" ? $.parseJSON(response.responseText) : response, s = "<select>";
                    s += '<option value="0">--Select Fund--</option>';
                    $.each(data, function () {
                        s += '<option value="' + data + '">' + data + '</option>';
                    })
                    s += "</select>";
                }
            }
        },

1 个答案:

答案 0 :(得分:3)

您的问题可能在{ name: 'FundCode', index: 'FundCode', editable: true, edittype: "select", editoptions: { dataUrl: '@Url.Action("PopulateDdl", "FundCode")' }, buildSelect: function (response) { var data = typeof response === "string" ? $.parseJSON(response.responseText) : response, s = "<select>"; s += '<option value="0">--Select Fund--</option>'; $.each(data, function() { s += '<option value="' + data + '">' + data + '</option>'; }) s += '</select>'; // <<<<<<< close the select } } ,您正在打开标记但从未关闭它,这可能会破坏您的HTML,请尝试关闭选择可以解决问题:

response

修改

当给予JSON.parse的值实际上未定义时,通常会看到该错误。所以,我会检查试图解析它的代码 - 很可能你没有正确解析实际的字符串:

  • 确保response.responseText
  • 中有有效数据
  • 确保数据实际上不在Json变量中,如果是,那么您就不应该 首先使用response.responseText
  • 确保数据尚未采用json格式,并且您正在再次对其进行解析,因为在JAVA中使用s函数后返回数组,因此很可能是这种情况。
  • 构建选择后,您应使用return Charts("Chart1").SeriesCollection(1).XValues =_Worksheets("Sheet1").Range("B1:B5") 才能使其生效