C# ASP.NET MVC$.post调用返回字符串…需要关于jqGrid格式的帮助吗
我试图在用户编辑数据时动态填充jqGrid的下拉列表。我有它几乎工作,但是,有一个值在下拉调用“未定义”。我怀疑这是因为我将数据发送到网格的方式。我使用ASP.NET MVC 2,并使用jQuery获取下拉列表的数据,如下所示:C# ASP.NET MVC$.post调用返回字符串…需要关于jqGrid格式的帮助吗,c#,asp.net-mvc,jquery,jqgrid,C#,Asp.net Mvc,Jquery,Jqgrid,我试图在用户编辑数据时动态填充jqGrid的下拉列表。我有它几乎工作,但是,有一个值在下拉调用“未定义”。我怀疑这是因为我将数据发送到网格的方式。我使用ASP.NET MVC 2,并使用jQuery获取下拉列表的数据,如下所示: var destinations = $.ajax({ type:"POST", url: '<%= Url.Action("GetDestinations", "Logger") %>',
var destinations = $.ajax({ type:"POST",
url: '<%= Url.Action("GetDestinations", "Logger") %>',
dataType: "json",
async: false,
success: function(data) {
} }).responseText;
我正在使用StringBuilder迭代我的集合,并提供jqGrid需要的适当字符串:
foreach (var q in query)
{
sb.Append("ID:");
sb.Append(q.Destination);
sb.Append("; ");
}
我从控制器返回如下内容:
value: "FE:FedEx; IN:InTime; TN:TNT"
return this.Json(sb.ToString());
value: ""ID: One;ID: Two;ID: Three;ID: Four;ID: Five;""
return "{ value : """+sb.ToString()+""" }";
这是所有膨胀,我得到了所有的项目,我需要的下拉列表,但有一个额外的项目(最后一个)称为“未定义”
我认为问题在于当我在FireBug中调试时,jqGrid的结果如下所示:
value: "FE:FedEx; IN:InTime; TN:TNT"
return this.Json(sb.ToString());
value: ""ID: One;ID: Two;ID: Three;ID: Four;ID: Five;""
return "{ value : """+sb.ToString()+""" }";
查看如何有两组引号。这可能是因为当我说:
sb.ToString()
它可能会生成引号,然后jqGrid会添加第二组引号。但我不是百分之百同意
处理这个问题的最好方法是什么?如有任何建议,将不胜感激
解决方案:
我通过使用
返回ContentResult(sb.ToString()
我想使用Oleg提到的dataUrl方法,但还没有成功。我相信报价问题是通过这种方式解决的
$.ajax({ type:"POST",
url: '<%= Url.Action("GetDestinations", "Logger") %>',
dataType: "json",
async: false,
success: function(data) {
destinations = data.value;
}
});
Yay Linq(这不会有尾随的
;
,我认为这是您的问题。)
(可能有我没有测试过的打字错误)如果您试图解决jqGrid的问题,只有您可以选择其他方法 您可以使用和属性或代替
value
property。此功能是专门为在AJAX中使用而引入的。提供的定义url的形式如下
<select><option value="1">One</option> <option value="2">Two</option></select>
to使用“联邦快递:联邦快递;InTime:InTime;TNT:TNT”
而不是“ID:FedEx;ID:InTime;ID:TNT;”
已更新:您要求提供一个小示例。例如,让我们看看您可以通过列表
获取目的地字符串的所有不同值,此方法的名称为GetAllDestinations
。然后您使用的操作可以如下所示:
public JsonResult GetDestinationList() {
List<string> allDestinations = GetAllDestinations();
Json(allDestinations, JsonRequestBehavior.AllowGet);
}
更新2:答案已经很旧了。在此期间,将调用buildSelect
的jqGrid的代码被更改。现在buildSelect
将在jQuery.ajax
的success
处理程序中使用(参见),而不是之前的complete
处理程序(参见和示例).因此,在当前版本的jqGrid中
var response = jQuery.parseJSON(data.responseText);
不需要。数据
通常是解析的JSON数据,因此
buildSelect: function(data) {
var response = jQuery.parseJSON(data.responseText);
在上述代码中可以替换为
buildSelect: function(response) {
这是另一种选择 [控制器方法]
[HttpGet]
public ActionResult SchoolList()
{
//Get Schools
var qry = SchoolManager.GetAll();
//Convert to Dictionary
var ls = qry.ToDictionary(q => q.SchoolId, q => q.Name);
//Return Partial View
return PartialView("_Select", ls);
}
[[选择局部视图]
@model Dictionary<int, string>
<select>
<option value="-1">--select--</option>
@foreach(var val in Model)
{
<option value="@val.Key.ToString()">@val.Value</option>
}
希望这可以节省用户数小时的谷歌搜索时间!如果您尝试删除分号,该怎么办最后?只是一个想法…jqGrid需要分号来表示下拉列表中的下一项。好的,我想我明白了。最后一个分号导致了问题。现在正在解决。好的,我正在解决语法问题。希望尽快发布解决方案。谢谢。我通过使用sb.Remove(sb.Length-2,2)得到了“未定义”的结果但现在我在最后一个下拉项的末尾有一个引号。我想这是因为我还不知道如何去掉这两组引号。上面的第一个例子对我很有用。似乎问题是在使用responseText时,在值周围放置了双引号。按照上面的逻辑,没有双引号关于在组合框中最后一个值的末尾用双引号解决问题的值。Oleg,我想使用dataUrl方法,因为根据文档,它似乎是首选方法。我能够将dataUrl设置为正确的url,因为我可以在点击编辑按钮时看到网格调用它。我不确定如何设置设置buildSelect部分。你能提供一个代码片段吗?我下周会尝试这个。谢谢你的帮助。我也有兴趣看到buildSelect的工作片段。如果你有一个,请在这里发布或通过电子邮件发送。Thanks@Anatoliy:对不起,我现在很忙:我在出差的时候在客户处。所以我发的邮件很忙最后一次。@Oleg:是的,我明白,毫无疑问,客户有最高优先级。
{ name: 'SchoolId', index: 'SchoolId', align: 'left', editable: true, edittype: 'select', editoptions: { dataUrl: '@Url.Action("SchoolList")' }, editrules: { required: true} },