ASP.NET MVC и JQuery получают информацию для контроллера - PullRequest
6 голосов
/ 06 января 2009

Я полностью запутался в том, как делать AJAX с jQuery, и чем больше я стараюсь, тем больше путаюсь. На данный момент все, что я хочу сделать, это получить данные на мой контроллер с помощью jQuery ajax. Некоторый код для моего вызова jquery ajax:

$(function() {
    $('#buttonAddLink').click(function() {
        var AjaxLink = {
            title: $("#linkTitle").val(),
            url: $("#linkUrl").val()
        };

        $.ajax({
            url: '/User/AddLink',
            type: 'POST',
            data: AjaxLink,
            dataType: 'json',
            success: function(result){
                $('.added').html(result.Result).show();
            }
         });         
    });    
});

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

public ActionResult AddLink(string title, string url)
{
    return Json(new { Result = string.Format(title + " " + url)});
}

Все, что я в основном пытаюсь сделать, это выполнить вызов Ajax и вернуть его на экран, чтобы убедиться, что данные были отправлены на контроллер.

Ответы [ 7 ]

3 голосов
/ 06 января 2009

Это связано с тем, как вы структурируете свой запрос. Ваш вызов JQuery отправляет данные в действие AddLink на контроллере пользователя в виде данных POST, что означает, что в вашем коде C # вы будете получать к ним доступ через объект Request.Form. С тем, что вы пытаетесь сделать, вы структурируете URL jQuery как

/User/AddLink/{Title}/{URL}

Это потребует от вас написать правило в вашем файле Global.ASAX, которое обрабатывает ввод такого рода. Короче говоря, если вы просто измените свой метод AddLink следующим образом:

public ActionResult AddLink()
{
    return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])});
}

Полагаю, вы получите ответ, который ищете.

2 голосов
/ 16 ноября 2011

Хорошо, попробуйте этот код, используя Ajax для передачи данных в ваш метод действия:

jQuery.ajax({
            url: '@Url.Action("AddLink", "User")',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({ title: title, url: url }),
            success: function (result) { }
        });
1 голос
/ 06 января 2009

Используйте такой инструмент, как firebug, чтобы убедиться, что URL, который вы ожидаете, вызывается.

Процедура отладки =>

  1. Используйте Firbug, чтобы определить, что правильный URL-адрес вызывается и правильные данные отправляются в сообщении
  2. Прервите вызов в действии и убедитесь, что параметры заполняются правильно
  3. Снова используйте Firebug, чтобы проверить ответ

Панель инструментов разработчика IE также можно использовать вместо Firebug, если вы предпочитаете IE. если URL-адрес вызова и данные публикации кажутся правильными, а действие не вызывается, следует проверить правила маршрутизации. т.е. имеет ли он какие-либо значения по умолчанию, и в этом случае инфраструктура MVC будет искать сигнатуру метода, которая содержит эти значения по умолчанию (у вас есть {id} в вашем правиле URL?)

1 голос
/ 06 января 2009

Вы пытались написать полный URL? У меня был проект, работающий на моем локальном IIS, который имел ту же проблему. Полный URL был http://localhost/myproject/user/addlink,, но использование "/ user / addlink" в вызове jQuery ajax отправлялось на http://localhost/user/addlink (обратите внимание, что "myproject" отсутствует, потому что это не базовый URL, поскольку jQuery знает).

0 голосов
/ 15 октября 2015

Так что у меня было немного времени, пытаясь выяснить, как вернуть данные из вызова AJAX. Я передавал объект JSON из представления в контроллер, а затем возвращал идентификатор объекта, когда это было сделано.

Итак, я наконец заработал, и вот что я сделал на виде:

var obj = {
   property1 : '',
   property2 : ''
};

$.ajax({
    // Returns the full url
    url: '@Url.Action("Method", "Controller")', 
    // Sends as a json object, I actually have an object that maps to my ViewModel, this is just for explaining
    data: obj, 
    // You are telling that you are receiving a json object
    dataType: 'json', 
    success: function (id) {
       // do code here with id
    }
})

Для моего контроллера я возвратил объект Json и сделал AllowGet как JsonRequestBehavior

public ActionResult Method (ViewModel vm)
{
    int id = ... (do something with the vm)
    return Json(id, JsonRequestBehavior.AllowGet);
}

Edit: Кроме того, кажется, что у вас есть POST как тип запроса к контроллеру, а ваш метод контроллера не имеет аннотации [HttpPost]. Это также может иметь место.

Надеюсь, это поможет!
Ура!

0 голосов
/ 13 июля 2011

Я еще не потратил время на его тестирование, но похоже, что оно должно работать. Единственное, что я хотел бы убедиться, это то, что вы украсили функцию контроллера, чтобы он знал, что ищет пост, подобный следующему:

[HttpPost]
public ActionResult AddLink()
{
    return Json(new { Result = string.Format(Request.Form["title"] + " " +     Request.Form["url"])});
}

У меня должно быть время проверить это сегодня днем, если ни одно из этих решений не сработает для вас.

0 голосов
/ 06 января 2009

вы пытались использовать метод jQuery.post должно быть что-то вроде

jQuery.post("/User/AddLink",AjaxLink,function(data,textStatus)
{
  if(textStatus=="success")
  {
    //do something with data which is the result from the call}
  }
  else
  {
  //failed somewhere along the line
  }
},"json");

значения post отображаются в параметры вызова MVC, поэтому код foxxtrot не требуется.

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