2015-07-09 60 views
0

我从控制器返回一个字符串jqGrid,但不能填充下拉列表。在查看从MVC控制器填充编辑表单中的jqGrid选择列表

电网代码:

 { 
      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不在同一个组中。我移动它,错误改变了。现在的错误是“意外令牌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>"; 
       } 
      } 
     }, 

回答

3

你的问题可能与s = "<select>",您正在打开的标签,但从来没有关闭它,这可以毁掉你的HTML,尝试,如果关闭该选择可以解决这一问题:

{ 
      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 
      } 
     } 

编辑

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

  • 确保有在response.responseText有效数据
  • 确保数据实际上并没有在response变量中,如果是这样的话,那么你应该不是 首先使用response.responseText
  • 确保数据还没有以json格式存在,并且你正在重新解析它,这很可能是因为你在JAVA中使用Json函数后返回数组。
  • 建设的选择后,你将为了使用return s它生效
+0

你知道一个教程,说明如何做服务器端的东西,即所以它得到的准备清单客户端以及定义的json? – BattlFrog

+0

目前得到客户端的字符串看起来像这样:[“8:达拉斯;”,“10:丹佛;”,“34:密歇根州;”,....] – BattlFrog

+0

@BattlFrog我想一些例子[tutorial1] (http://www.mkyong.com/tutorials/java-json-tutorials/),[tutorial2](http://www.tutorialspoint.com/json/json_java_example.htm),[tutorial3](http:// iviewsource.com/codingtutorials/getting-started-with-javascript-object-notation-json-for-absolute-beginners/)会帮助你,如果有什么不清楚的地方,随时问我会很高兴帮助 :) – KAD

相关问题