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)
        });

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

我正在工作的网页有:

 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

谢谢罗伯特!