这让我发疯了......作为另一个问题的一部分,我一直致力于将ajax传输到我的mvc4网络应用程序。
我一直以此为例: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)
});
答案 0 :(得分:0)
我正在处理的网页有:
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)
});
我没有按照罗伯特的智慧使用[webmethod]并使用了json的回应。
最终/工作职能是: [HttpPost] public JsonResult GetAssignedColors(string szUserRecID) { int Rec = Convert.ToInt32(szUserRecID); var query =(来自db.tblColors中的t 在t.fkColorID上的db.tblUser中加入c等于c.pkColorID 其中t.fkRecID == Rec 选择新的ViewModels.ColorList() { ColorName = c.szColorName, ID = t.ColorID })。OrderBy(c => c.ColorName); // var q = query.ToArray(); //如果我中断并查看q,则数组存在 返回Json(query.ToArray());
}
请注意删除JsonRequestBehavior.AllowGet
感谢罗伯特!