Невозможно преобразовать объект, полученный от вызова ajax, в длинный - PullRequest
0 голосов
/ 06 августа 2009

Я использую 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 вместо этого работает просто отлично. Просто он мне нужен как объект, потому что на некоторых других сайтах, на которые я ссылаюсь, есть строки для идентификаторов, а не long.

ОБНОВЛЕНИЕ: Я попытался запустить код на локальном хосте, чтобы установить точку останова. Сначала я изменил строку return this.Json(Convert.ToInt64(id)); на long idAsLong = Convert.ToInt64(id));. Вот что говорит мне отладчик:

  • При наведении курсора на id появляется сообщение: " id | {string [1]} "
    и когда я нажимаю кнопку «плюс», отображается: « [0] | '7128383' »

  • Когда я наводю курсор мыши на idAsLong, он говорит: « idAsLong | 0 »

Почему он не конвертирует это должным образом?

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Шахклапеш сказал:

Итак, id это массив строк, который Вы не можете конвертировать в Int64. 0-й элемент содержит фактический идентификатор (который можно конвертировать в Int64). долго idAsLong = Convert.ToInt64 (id [0]);

Что было правильно, за исключением того, что поскольку id является объектом, вы не можете использовать индексы, такие как [0]. Вместо этого, что работало, было это: Convert.ToInt64(((string[])id)[0])

Спасибо за помощь, Шахклапеш!

1 голос
/ 06 августа 2009

Я не думаю, что модель знает, как сделать объект из параметра запроса, так что вы получите нулевое значение. Попробуйте принять id в качестве строки и преобразовать его в long.

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

Или вы можете оставить его как строку, поскольку вы просто передаете его обратно через JSON (который в любом случае просто сериализует его обратно как строку). Вам нужно будет выполнить преобразование только в том случае, если вы нуждаетесь в этом на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...