WebMethod返回变量的名称,而不是数组

时间:2014-05-05 02:42:49

标签: c# asp.net-mvc asp.net-ajax

这让我发疯了......作为另一个问题的一部分,我一直致力于将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)
        });

1 个答案:

答案 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

感谢罗伯特!