Подтвердить что ты не робот

Как вызвать функции контроллера с помощью JQuery в ASP.NET MVC

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

$.ajax("MyController/MyAction", function(data) {
    alert(data);
});

Означает ли это, что я должен добавить MicrosoftMvcAjax.js или MicrosoftAjax.js вместе с Jquery lib?

Кроме того, что должен иметь второй параметр в функции $.ajax()?

Наконец, любая другая ссылка в stackoverflow или за пределами сайта, которая может быть полезна в asp.net mvc w/ajax и jquery?

Спасибо.

4b9b3361

Ответ 1

Вы можете начать читать здесь jQuery.ajax()

На самом деле действие контроллера - это общедоступный метод, доступ к которому можно получить через URL. Таким образом, любой вызов Action из вызова Ajax может быть сделан либо MicrosoftMvcAjax, либо jQuery. Для меня jQuery - самый простой. В приведенной выше ссылке было много примеров. Типичный пример для вызова ajax выглядит следующим образом.

$.ajax({
    // edit to add steve suggestion.
    //url: "/ControllerName/ActionName",
    url: '<%= Url.Action("ActionName", "ControllerName") %>',
    success: function(data) {
         // your data could be a View or Json or what ever you returned in your action method 
         // parse your data here
         alert(data);
    }
});

Дополнительные примеры можно найти в здесь

Ответ 2

предыдущий ответ - только ASP.NET

вам нужна ссылка на jquery (возможно, из CDN): http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js

а затем аналогичный блок кода, но проще...

$.ajax({ url: '/Controller/Action/Id',
         success: function(data) { alert(data); }, 
         statusCode : {
             404: function(content) { alert('cannot find resource'); },
             500: function(content) { alert('internal server error'); }
         }, 
         error: function(req, status, errorObj) {
               // handle status === "timeout"
               // handle other errors
         }
});

Я добавил некоторые необходимые обработчики, 404 и 500 случаются все время, если вы отлаживаете код. Кроме того, многие другие ошибки, такие как тайм-аут, будут отфильтрованы через обработчик ошибок.

Контроллеры ASP.NET MVC обрабатывают запросы, поэтому вам просто нужно запросить правильный URL-адрес, и контроллер подберет его. Этот пример кода работает в среде, отличной от ASP.NET

Ответ 3

Мы можем легко вызвать метод контроллера с помощью Javascript/Jquery следующим образом:

Предположим, что следующий метод Controller, который должен быть вызван, возвращает массив некоторых объектов класса. Пусть класс "A"

public JsonResult SubMenu_Click(string param1, string param2)

    {
       A[] arr = null;
        try
        {
            Processing...
           Get Result and fill arr.

        }
        catch { }


        return Json(arr , JsonRequestBehavior.AllowGet);

    }

Ниже приведен комплексный тип (класс)

 public class A
 {

  public string property1 {get ; set ;}

  public string property2 {get ; set ;}

 }

Теперь было вызвано вызовом над контроллером JQUERY. Ниже приведена функция JQuery для вызова метода контроллера.

function callControllerMethod(value1 , value2) {
    var strMethodUrl = '@Url.Action("SubMenu_Click", "Home")?param1=value1 &param2=value2'
    $.getJSON(strMethodUrl, receieveResponse);
}


function receieveResponse(response) {

    if (response != null) {
        for (var i = 0; i < response.length; i++) {
           alert(response[i].property1);
        }
    }
}

В приведенной выше функции JQuery 'callControllerMethod' мы разрабатываем URL-адрес контроллера контроллера и помещаем его в переменную с именем 'strMehodUrl' и вызываем метод getJSON JQuery API.

receieveResponse - это функция обратного вызова, получающая ответное или возвращаемое значение метода контроллеров.

Здесь мы использовали JSON, так как мы не можем использовать объект класса С#

непосредственно в функцию javascript, поэтому мы преобразовали результат (arr) в методе контроллера в объект JSON следующим образом:

Json(arr , JsonRequestBehavior.AllowGet);

и возвратил этот объект Json.

Теперь в функции обратного вызова Javascript/JQuery мы можем использовать этот результирующий объект JSON и работать соответственно, чтобы отображать данные ответа в пользовательском интерфейсе.

Для получения дополнительной информации нажмите здесь

Ответ 4

В ответ на вышеприведенное сообщение я думаю, что эта строка нужна вместо вашей строки: -

var strMethodUrl = '@Url.Action("SubMenu_Click", "Logging")?param1='+value1+' &param2='+value2

Или вы отправляете фактические значения строк1 и value2 в контроллер.

Однако для меня он только вызывает контроллер один раз. Кажется, что каждый раз нажимает "receieveResponse", но точка останова на методе контроллера показывает, что он попадает только 1 раз до обновления страницы.


Вот рабочее решение. Для страницы cshtml: -

   <button type="button" onclick="ButtonClick();"> Call &raquo;</button>

<script>
    function ButtonClick()
    {
        callControllerMethod2("1", "2");
    }
    function callControllerMethod2(value1, value2)
    {
        var response = null;
        $.ajax({
            async: true,
            url: "Logging/SubMenu_Click?param1=" + value1 + " &param2=" + value2,
            cache: false,
            dataType: "json",
            success: function (data) { receiveResponse(data); }
        });
    }
    function receiveResponse(response)
    {
        if (response != null)
        {
            for (var i = 0; i < response.length; i++)
            {
                alert(response[i].Data);
            }
        }
    }
</script>

И для контроллера: -

public class A
{
    public string Id { get; set; }
    public string Data { get; set; }

}
public JsonResult SubMenu_Click(string param1, string param2)
{
    A[] arr = new A[] {new A(){ Id = "1", Data = DateTime.Now.Millisecond.ToString() } };
    return Json(arr , JsonRequestBehavior.AllowGet);
}

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

Ответ 5

Вы можете легко вызвать любое действие контроллера с помощью jQuery AJAX, например:

Примечание. В этом примере мое имя контроллера Студент

Действие контроллера

 public ActionResult Test()
 {
     return View();
 }

В Любой вид этого выше контроллера вы можете вызвать действие Test(), как это:

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
    $(document).ready(function () {
        $.ajax({
            url: "@Url.Action("Test", "Student")",
            success: function (result, status, xhr) {
                alert("Result: " + status + " " + xhr.status + " " + xhr.statusText)
            },
            error: function (xhr, status, error) {
                alert("Result: " + status + " " + error + " " + xhr.status + " " + xhr.statusText)
            }
        });
    });
</script>