WebMethod返回变量的名称,而不是数组
本文关键字:数组 返回 变量 WebMethod | 更新日期: 2023-09-27 18:01:44
我快疯了…作为另一个问题的一部分,我一直致力于ajax传输到我的mvc4 web应用程序。
我一直在用这个作为例子:http://www.codeproject.com/Articles/692793/Introduction-to-Knockout-js-and-CRUD-Operations-in
模型如下:
public class ColorList
{
public int? ID;
public string ColorName;
}
控制器功能如下:
[WebMethod]
public ColorList[] GetAssignedColors(string szUserRecID)
{
int Rec = Convert.ToInt32(szUserRecID);
var query = (from t in db.tblColors
join c in db.tblUser on t.fkColorID equals c.pkColorID
where t.fkRecID == Rec
select new ViewModels.ColorList()
{
ColorName = c.szColorName,
ID = t.ColorID
}).OrderBy(c => c.ColorName);
//var q = query.ToArray(); // if I break and view q, the array exists
return query.ToArray();
}
不确定这是否重要,但这是我的Ajax方法:
$.ajax({
type: "POST",
url: '@Url.Action("GetAssignedColors", "EditColors")',
data: { szUserRecID: RecID },
success: function (results) {
var colors = $.map(results.d, function (item) {
return new Color(item)
});
self.CurrentColors(colors);
},
error: function (err) {
alert(err.status + " : " + err.statusText);
}
})
如果我看提琴,我的代码提供的响应是(在文本视图中):
" MyApps.ViewModels.ColorList [] "
不是我期望的颜色数组。
为什么函数返回变量名作为数组而不是数组本身?
我玩了这个,但我的ajax调用似乎不解释json响应…然而,数据显示在这个例子中,但得到一个200/ok与看似不可用的数据在我的网页。
[HttpPost]
public JsonResult GetAssignedColors(string szUserRecID)
{
int Rec = Convert.ToInt32(szUserRecID);
var query = (from t in db.tblColors
join c in db.tblUser on t.fkColorID equals c.pkColorID
where t.fkRecID == Rec
select new ViewModels.ColorList()
{
ColorName = c.szColorName,
ID = t.ColorID
}).OrderBy(c => c.ColorName);
//var q = query.ToArray(); // if I break and view q, the array exists
return Json(query.ToArray(), JsonRequestBehavior.AllowGet);
}
由于格式在注释中不起作用,这是有效的;结果没有必要的数据,但"数据"有。
success: function (data) {
var colors = $.map(data, function (item) {
return new Color(item)
});
我正在工作的网页有:
success: function (result) {
var colors = $.map(result.d, function (item) {
return new Color(item)
});
实际工作方法为:
success: function (data) {
var colors = $.map(data, function (item) {
return new Color(item)
});
根据Robert的智慧,我没有使用[webmethod],而是使用json响应。
最终/工作函数为:(HttpPost)GetAssignedColors(string szUserRecID){int Rec = Convert.ToInt32(szUserRecID);var query =(从db.tblColors中查询在db中加入c。tblUser on t.fkColorID = c.k kcoloridwhere t.fkRecID == Rec选择新的ViewModels.ColorList(){ColorName = c.szColorName;ID = t.ColorID}).order (c => c. colorname);//var q = query.ToArray();//如果中断并查看q,则表示数组存在返回Json (query.ToArray ());
}
注意删除了JsonRequestBehavior。AllowGet
谢谢罗伯特!