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

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提到但尚未完成工作。


呼如林
浏览 476回答 3
3回答

繁花如伊

如果你试图解决jqGrid的问题,你可以选择另一种方式。您可以使用editUrl和buildSelect属性进行editoptions或searchoptions而不是valueproperty。此功能专门针对AJAX中的使用而引入。所述dataUrl定义的形式等网址提供的结果<select><option&nbsp;value="1">One</option>&nbsp;<option&nbsp;value="2">Two</option></select>如果您更容易从服务器返回JSON结果,您的自定义函数buildSelect将有所帮助。作为参数,它接收从服务器发送的数据,它应该返回字符串<select><option>...</option></select>。在你的方式你会取得更好的结果。如果您决定保持旧的方式,至少应该修改您的代码foreach&nbsp;(var&nbsp;q&nbsp;in&nbsp;query){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(sb.Length&nbsp;!=&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(';'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(q.Destination);&nbsp;//&nbsp;instead&nbsp;of&nbsp;sb.Append("ID"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(':'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(q.Destination);}到了"FedEx:FedEx;InTime:InTime;TNT:TNT"不是"ID:FedEx; ID:InTime; ID:TNT; "。更新:你问了一个小例子。让我们举例来说,可以将目标字符串的所有不同值作为a&nbsp;List<string>和此方法的名称GetAllDestinations。然后,dataUrl使用的操作可能如下所示public&nbsp;JsonResult&nbsp;GetDestinationList()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;List<string>&nbsp;allDestinations&nbsp;=&nbsp;GetAllDestinations(); &nbsp;&nbsp;&nbsp;&nbsp;Json(allDestinations,&nbsp;JsonRequestBehavior.AllowGet);}要在jqGrid的editoptions或searchoptions中使用此操作,您可以定义以下内容{&nbsp;name:&nbsp;'destinations',&nbsp;ditable:&nbsp;true,&nbsp;edittype:'select', &nbsp;&nbsp;editoptions:&nbsp;{&nbsp;dataUrl:'<%=&nbsp;Url.Action("GetDestinationList","Home")&nbsp;%>', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildSelect:&nbsp;function(data)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;response&nbsp;=&nbsp;jQuery.parseJSON(data.responseText); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;s&nbsp;=&nbsp;'<select>'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(response&nbsp;&&&nbsp;response.length)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0,&nbsp;l=response.length;&nbsp;i<l&nbsp;;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ri&nbsp;=&nbsp;response[i]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;+=&nbsp;'<option&nbsp;value="'+ri+'">'+ri+'</option>'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;s&nbsp;+&nbsp;"</select>"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}}如果您不希望每个HTTP GET使用的操作可以使用Json(allDestinations);而不是Json(allDestinations, JsonRequestBehavior.AllowGet);在GetDestinationList操作中使用,但是添加到jqGrid选项列表中的附加选项ajaxSelectOptions:&nbsp;{&nbsp;type:&nbsp;"POST"&nbsp;}更新2:答案已经过时了。在此期间,buildSelect将调用将被调用的jqGrid代码。现在buildSelect将在(在这里看到)success处理程序中使用而不是之前的处理程序(例如,参见帖子和帖子)。所以在当前版本的jqGrid中行jQuery.ajaxcompletevar&nbsp;response&nbsp;=&nbsp;jQuery.parseJSON(data.responseText);不需要。的data通常是被分析的JSON数据等的线&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildSelect:&nbsp;function(data)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;response&nbsp;=&nbsp;jQuery.parseJSON(data.responseText);在上面的代码中可以替换为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildSelect:&nbsp;function(response)&nbsp;{
打开App,查看更多内容
随时随地看视频慕课网APP