Нужна помощь с маршрутом MVC, когда я jQuery AJAX вызвать маршрут - PullRequest
3 голосов
/ 12 мая 2009

Я пытаюсь получить доступ к простому маршруту ASP.NET MVC, но он выдает ошибку:

Словарь параметров содержит пустая запись для параметра isFoo ненулевого типа 'System.Boolean' для метода «System.Web.Mvc.ActionResult Transform (Boolean, System.String) 'в .. бла-бла-бла.

Т.е.. логическое свойство не устанавливается ... это означает, что значение не передается.

Итак, у меня есть метод Action, называемый Transform (..), и он не принимает значения, HTTP-опубликованные в нем, с помощью jQuery. Это как мои опубликованные значения теряются: (

Сайт MVC - это стандартное ASP.NET MVC File-> New-> MVC Web Application. Ничего не изменилось, за исключением добавления нового класса контроллера. это все.

using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace WorldDomination.EbonHawk.Web.Controllers
{
    public class AjaxController : Controller
    {
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Transform(bool isFoo, string bar)
        {
            // blah....
            return View();
        }

    }
}

и как это называется, используя jQuery ....

$.ajax({
    type: "POST",
    url: "/ajax/transform",
    data: "isfoo=true&bar=" + $("#Bar").val(),
    contentType: "application/json;",
    dataType: "json",
    success: function() { alert("it worked"); },
    failure: function() { alert("Uh oh"); }
});

Когда я использую FireBug, это определенно показывает, что я пытаюсь отправить сообщение по URL. Кто-нибудь может помочь?

Ответы [ 3 ]

3 голосов
/ 12 мая 2009

На первый взгляд кажется, что вы путаете jQuery ...

Вы говорите, что ваш тип данных - JSON, но отправляете текст. Удалите предложение dataType из вашего сообщения AJAX, и jQuery определит и отправит ваше сообщение соответствующим образом.

1 голос
/ 12 мая 2009

Что сказал Джефф. Кроме того, если вы хотите сохранить dataType, ваша строка data должна выглядеть следующим образом:

...
data: { isfoo: true, bar: $("#Bar").val() },
...
0 голосов
/ 12 мая 2009

Действия контроллера ASP.NET MVC просто переводят параметры POST или GET в аргументы вашей функции. Если аргументы передаются правильно с использованием одного из этих методов HTTP, у вас все будет в порядке. Однако, похоже, что jQuery работает неправильно.

Вы должны изменить свой вызов $ .ajax следующим образом

$.ajax({
    type: "POST",
    url: "<%= Url.Action("Transform", "Ajax") %>",
    data: { isfoo: true, bar: $("#Bar").val() },
    contentType: "application/json;",
    dataType: "json",
    success: function() { alert("it worked"); },
    failure: function() { alert("Uh oh"); }
});

Обратите внимание, что эта проблема не имеет ничего общего с системой маршрутизации. Если вы хотите использовать маршрутизацию для создания чистого URL-адреса для вызова с использованием параметров, вам необходимо изменить метод на POST. В целом, то, как вы сейчас это делаете, намного чище. Однако было бы хорошо использовать систему маршрутизации для генерации базового URL-адреса для вашей службы.

EDIT:

Если бы вы использовали параметры GET, как в опции data, вам также нужно было бы сделать isfoo = read isFoo =, я думаю. Я не могу вспомнить, имеют ли значение заглавные буквы при параметризации.

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