【发布时间】:2009-08-06 03:15:08
【问题描述】:
我正在使用 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 字符串而不是 longs。
更新:我尝试在 localhost 上运行代码,以便设置断点。首先,我将return this.Json(Convert.ToInt64(id)); 更改为long idAsLong = Convert.ToInt64(id));。这是调试器告诉我的:
当我将鼠标悬停在 id 上时,它会显示:“id | {string[1]}”
当我按下加号按钮时显示:“[0] | '7128383'”当我将鼠标悬停在 idAsLong 上时,它显示:“idAsLong | 0”
为什么不能正确转换?
【问题讨论】:
-
this.Json 是做什么的?它可以接受 Int64 吗?
-
所以,id 是一个字符串数组,不能转换为 Int64。第 0 个元素包含实际 ID(可以转换为 Int64)。 long idAsLong = Convert.ToInt64(id[0]);
-
你是对的 shahklapesh,除了因为 id 是一个对象,你不能使用像 [0] 这样的索引。相反,起作用的是:Convert.ToInt64(((string[])id)[0])。谢谢你的帮助。如果您重新写下您在回答中所说的内容,我会接受它,以便为您提供信用/代表。