3 回答
TA贡献2012条经验 获得超12个赞
如果你试图解决jqGrid的问题,你可以选择另一种方式。
您可以使用editUrl和buildSelect属性进行editoptions或searchoptions而不是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) {- 3 回答
- 0 关注
- 587 浏览
添加回答
举报
