我正在使用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 ”
为什么不正确转换它?
答案 0 :(得分:1)
我不认为模型知道如何从请求参数中创建一个对象,所以你得到的是null。尝试将id作为字符串接受并将其转换为long。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LinkAccount(string site, string id)
{
return this.Json( Convert.ToInt64(id) );
}
或者您可以将其保留为字符串,因为您只是通过JSON将其传回(无论如何它只是将其序列化为字符串)。如果您需要在服务器上使用它,则只需要进行转换。
答案 1 :(得分:1)
所以,id是一个字符串数组,其中 你无法转换为Int64。第0名 element包含实际ID(其中 可以转换为Int64)。长 idAsLong = Convert.ToInt64(id [0]);
这是正确的,除了因为id是一个对象,你不能使用像[0]这样的索引。相反,有效的是:Convert.ToInt64(((string[])id)[0])
感谢Shahklapesh的帮助!