2009-08-06 38 views
0

我使用Asp.Net MVC的,我有我的控制器,這個方法:無法轉換對象,從AJAX調用收到,成一個長

[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));警報不火......

從對象接收到的很長的,爲什麼我不能轉換對象的任何想法?

我已經知道改變LinkAccount方法來接受一個長時間工作就好了。這只是我需要它作爲一個對象,因爲我連接的其他一些網站有ID的字符串而不是longs。

更新:我試着在localhost上運行代碼,所以我可以設置一個斷點。首先,我將行return this.Json(Convert.ToInt64(id));更改爲long idAsLong = Convert.ToInt64(id));。下面是調試器告訴我:

  • 當我將鼠標懸停在ID,它說:「ID | {字符串[1]}
    ,當我按加號按鈕表示:「[ 0] | '7128383'

  • 當我將鼠標懸停在idAsLong,它說:」 idAsLong | 0

爲什麼它不正確地轉換它?

+0

這是什麼?Json幹什麼?它可以接受Int64嗎? – shahkalpesh 2009-08-06 03:35:04

+0

因此,id是一個字符串數組,您無法將其轉換爲Int64。第0個元素包含實際的ID(可以轉換爲Int64)。 long idAsLong = Convert.ToInt64(id [0]); – shahkalpesh 2009-08-06 03:37:09

+0

你是正確的shahklapesh,除了因爲id是一個對象,你不能使用索引像[0]。相反,什麼工作,是這樣的:Convert.ToInt64(((string [])id)[0])。謝謝你的幫助。如果你在答案中重寫了你所說的話,我會接受它給你的信用/代表。 – Matt 2009-08-06 04:28:07

回答

1

Shahklapesh說:

所以,ID是一個字符串數組,其中 你不能轉換爲Int64的。第0個 元素包含實際ID(其中 可以轉換爲Int64)。 long idAsLong = Convert.ToInt64(id [0]);

這是正確的,除了因爲id是一個對象,你不能使用索引像[0]。相反,什麼工作,是這樣的:Convert.ToInt64(((string[])id)[0])

感謝您的幫助Shahklapesh!

1

我不認爲該模型知道如何使一個對象超出請求參數,所以你得到的是一個null。嘗試接受id作爲字符串並將其轉換爲long。

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

或者你可以把它作爲一個字符串,因爲你只是路過回通過JSON(這隻會序列化回爲一個字符串反正)。如果你需要在服務器上使用它,你只需要進行轉換。