3 回答
TA贡献2012条经验 获得超12个赞
如果你试图解决jqGrid的问题,你可以选择另一种方式。
您可以使用editUrl和buildSelect属性进行editoptions或searchoptions而不是value
property。此功能专门针对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.ajax
complete
var response = jQuery.parseJSON(data.responseText);
不需要。的data
通常是被分析的JSON数据等的线
buildSelect: function(data) { var response = jQuery.parseJSON(data.responseText);
在上面的代码中可以替换为
buildSelect: function(response) {
- 3 回答
- 0 关注
- 515 浏览
添加回答
举报