【问题标题】:Cannot convert object, recieved from ajax call, into a long无法将从 ajax 调用接收到的对象转换为 long
【发布时间】: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])。谢谢你的帮助。如果您重新写下您在回答中所说的内容,我会接受它,以便为您提供信用/代表。

标签: c# ajax json object


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    Shahklapesh 说:

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

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

    感谢 Shahklapesh 的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2021-05-03
      • 2021-05-23
      • 1970-01-01
      • 2010-09-09
      相关资源
      最近更新 更多