为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET MVC $ .post调用返回字符串...需要jqGrid格式的帮助

ASP.NET MVC $ .post调用返回字符串...需要jqGrid格式的帮助

C#
呼如林 2019-09-13 10:09:54
ASP.NET MVC $ .post调用返回字符串...需要jqGrid格式的帮助我正在尝试在用户编辑数据时动态填充jqGrid的下拉列表。我有很多工作,但下拉调用“undefined”中有一个值。我怀疑这是因为我将数据发送到网格的方式。我正在使用ASP.NET MVC 2,我正在使用jQuery获取下拉数据,如下所示:var destinations = $.ajax({ type:"POST",                         url: '<%= Url.Action("GetDestinations", "Logger") %>',                         dataType: "json",                         async: false,                         success: function(data) {                          } }).responseText;现在,jqGrid想要下拉列表的值格式如下:value: "FE:FedEx; IN:InTime; TN:TNT"我正在使用StringBuilder迭代我的集合并提供jqGrid想要的正确字符串:foreach (var q in query){      sb.Append("ID:");      sb.Append(q.Destination);      sb.Append("; ");}我从我的控制器返回这个:return this.Json(sb.ToString());这都是膨胀,我获得了下拉列表所需的所有项目,但是有一个名为“undefined”的额外项目(最后一项)。我认为问题是当我在FireBug中调试时,jqGrid的结果如下所示:value: ""ID: One;ID: Two;ID: Three;ID: Four;ID: Five;""看看有两套报价。这可能是因为当我说:sb.ToString()它可能生成引号,然后jqGrid添加第二组。但我不是百分之百。处理这个问题的最佳方法是什么?任何建议将不胜感激。解:我通过使用返回ContentResult(sb.ToString();我想使用dataUrl方法作为Oleg提到但尚未完成工作。
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

如果你试图解决jqGrid的问题,你可以选择另一种方式。

您可以使用editUrlbuildSelect属性进行editoptionssearchoptions而不是valueproperty。此功能专门针对AJAX中的使用而引入。所述dataUrl定义的形式等网址提供的结果

<select><option value="1">One</option> <option value="2">Two</option></select>

如果您更容易从服务器返回JSON结果,您的自定义函数buildSelect将有所帮助。作为参数,它接收从服务器发送的数据,它应该返回字符串<select><option>...</option></select>。在你的方式你会取得更好的结果。

如果您决定保持旧的方式,至少应该修改您的代码

foreach (var q in query){
     if (sb.Length != 0)
         sb.Append(';');
     sb.Append(q.Destination); // instead of sb.Append("ID");
     sb.Append(':');
     sb.Append(q.Destination);}

到了"FedEx:FedEx;InTime:InTime;TNT:TNT"不是"ID:FedEx; ID:InTime; ID:TNT; "

更新:你问了一个小例子。让我们举例来说,可以将目标字符串的所有不同值作为a List<string>和此方法的名称GetAllDestinations。然后,dataUrl使用的操作可能如下所示

public JsonResult GetDestinationList() {
    List<string> allDestinations = GetAllDestinations();
    Json(allDestinations, JsonRequestBehavior.AllowGet);}

要在jqGrid的editoptions或searchoptions中使用此操作,您可以定义以下内容

{ name: 'destinations', ditable: true, edittype:'select',
  editoptions: { dataUrl:'<%= Url.Action("GetDestinationList","Home") %>',
                 buildSelect: function(data) {
                     var response = jQuery.parseJSON(data.responseText);
                     var s = '<select>';
                     if (response && response.length) {
                         for (var i = 0, l=response.length; i<l ; i++) {
                             var ri = response[i];
                             s += '<option value="'+ri+'">'+ri+'</option>';
                         }
                     }
                     return s + "</select>";
                 }
                }}

如果您不希望每个HTTP GET使用的操作可以使用Json(allDestinations);而不是Json(allDestinations, JsonRequestBehavior.AllowGet);GetDestinationList操作中使用,但是添加到jqGrid选项列表中的附加选项

ajaxSelectOptions: { type: "POST" }

更新2:答案已经过时了。在此期间,buildSelect将调用将被调用的jqGrid代码。现在buildSelect将在(在这里看到)success处理程序中使用而不是之前的处理程序(例如,参见帖子和帖子)。所以在当前版本的jqGrid中行jQuery.ajaxcomplete

var response = jQuery.parseJSON(data.responseText);

不需要。的data通常是被分析的JSON数据等的线

                 buildSelect: function(data) {
                     var response = jQuery.parseJSON(data.responseText);

在上面的代码中可以替换为

                 buildSelect: function(response) {



查看完整回答
反对 回复 2019-09-16
  • 3 回答
  • 0 关注
  • 475 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信