无法将从ajax调用接收的对象转换为long

时间:2009-08-06 03:15:08

标签: c# ajax json object

我正在使用Asp.Net-Mvc,我的控制器中有这个方法:

    [AcceptVerbs(HttpVerbs.Post)]    
    public ActionResult LinkAccount(string site, object id)
    {
        return this.Json(id);
    }

这是调用它的ajax方法:

$.post("/Account/LinkAccount", { site: "Facebook", 
                               id: FB.Facebook.apiClient.get_session().uid },
        function(result) {
            alert(result); 
        }, "json"
    );

返回this.Json(id);使警报工作...它提醒7128383(类似的东西)。

但如果我将this.Json(id)更改为this.Json(Conver.ToInt64(id));,警报就不会触发......

为什么我不能将从对象接收的对象转换为long?

我已经知道更改LinkAccount方法以接受long而不是正常工作。这只是我需要它作为一个对象,因为我正在连接的其他一些网站有id而不是long的字符串。

更新:我尝试在localhost上运行代码,以便设置断点。首先,我将行return this.Json(Convert.ToInt64(id));更改为long idAsLong = Convert.ToInt64(id));。这是调试器告诉我的内容:

  • 当我将鼠标悬停在ID上时,它会显示:“ id | {string [1]}

    当我按加号按钮显示:“ [0] |'7128383'

  • 当我将鼠标悬停在idAsLong上时,它会说:“ idAsLong | 0

为什么不正确转换它?

2 个答案:

答案 0 :(得分:1)

我不认为模型知道如何从请求参数中创建一个对象,所以你得到的是null。尝试将id作为字符串接受并将其转换为long。

[AcceptVerbs(HttpVerbs.Post)]    
public ActionResult LinkAccount(string site, string id)
{
    return this.Json( Convert.ToInt64(id) );
}

或者您可以将其保留为字符串,因为您只是通过JSON将其传回(无论如何它只是将其序列化为字符串)。如果您需要在服务器上使用它,则只需要进行转换。

答案 1 :(得分:1)

Shahklapesh说:

  

所以,id是一个字符串数组,其中   你无法转换为Int64。第0名   element包含实际ID(其中   可以转换为Int64)。长   idAsLong = Convert.ToInt64(id [0]);

这是正确的,除了因为id是一个对象,你不能使用像[0]这样的索引。相反,有效的是:Convert.ToInt64(((string[])id)[0])

感谢Shahklapesh的帮助!