Вызов методов действия ASP.NET MVC из JavaScript - PullRequest
59 голосов
/ 21 января 2012

У меня есть пример кода, подобный этому:

 <div class="cart">
      <a onclick="addToCart('@Model.productId');" class="button"><span>Add to Cart</span></a>
 </div>
 <div class="wishlist">
      <a onclick="addToWishList('@Model.productId');">Add to Wish List</a>
 </div>
 <div class="compare">
      <a onclick="addToCompare('@Model.productId');">Add to Compare</a>
 </div>    

Как написать код JavaScript для вызова метода действия контроллера?

Ответы [ 8 ]

63 голосов
/ 21 января 2012

Используйте jQuery ajax:

function AddToCart(id)
{
   $.ajax({
      url: 'urlToController',
      data: { id: id }
   }).done(function() {
      alert('Added'); 
   });
}

http://api.jquery.com/jQuery.ajax/

17 голосов
/ 16 декабря 2015

Просто вызовите Метод действия , используя Javascript , как показано ниже:

var id = model.Id; //if you want to pass an Id parameter
window.location.href = '@Url.Action("Action", "Controller")/' + id;

Надеюсь, это поможет ...

13 голосов
/ 21 января 2012

Вы вызываете метод addToCart и передаете идентификатор продукта.Теперь вы можете использовать jQuery ajax для передачи этих данных в ваш метод действий на стороне сервера. D

jQuery post - это короткая версия jQuery ajax.обратные вызовы и обработка ошибок, используйте jQuery ajax,

function addToCart(id)
{
  $.ajax({
  url: '@Url.Action("Add","Cart")',
  data: { id: id },
  success: function(data){
    //call is successfully completed and we got result in data
  },
  error:function (xhr, ajaxOptions, thrownError){
                  //some errror, some show err msg to user and log the error  
                  alert(xhr.responseText);

                }    
  });
}

При выполнении вызовов ajax я настоятельно рекомендую использовать вспомогательный метод Html, например Url.Action, для генерации пути к вашим методам действий.

Это будет работать, если ваш код находится в режиме бритвы, потому что Url.Action будет выполняться бритвой на стороне сервера, а выражение c # будет заменено на правильный относительный путь.Но если вы используете свой код jQuery во внешнем js-файле, вы можете рассмотреть подход, упомянутый в этом ответе .

10 голосов
/ 21 января 2012

Если вам не нужно много настраивать и стремиться к простоте, вы можете сделать это встроенным способом - AjaxExtensions.ActionLink метод .

<div class="cart">
      @Ajax.ActionLink("Add To Cart", "AddToCart", new { productId = Model.productId }, new AjaxOptions() { HttpMethod = "Post" });
</div>

Эта ссылка MSDN должна быть прочитана для всех возможных перегрузок этого метода и параметров AjaxOptions class . На самом деле вы можете использовать подтверждение, изменить метод http, установить клиентские сценарии OnSuccess и OnFailure и т. Д.

9 голосов
/ 21 января 2012

Если вы хотите вызвать действие из вашего JavaScript, одним из способов является встраивание вашего кода JavaScript в ваше представление (например, файл .cshtml), а затем, используя Razor, создать URL этого действия:

$(function(){
    $('#sampleDiv').click(function(){
        /*
         While this code is JavaScript, but because it's embedded inside
         a cshtml file, we can use Razor, and create the URL of the action

         Don't forget to add '' around the url because it has to become a     
         valid string in the final webpage
        */

        var url = '@Url.Action("ActionName", "Controller")';
    });
});
4 голосов
/ 20 октября 2016

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

var url = "YourActionName?parameterName=" + parameterValue;
window.location.href = url;
1 голос
/ 04 января 2016
Javascript Function

function AddToCart(id) {
 $.ajax({
   url: '@Url.Action("AddToCart", "ControllerName")',
   type: 'GET',
   dataType: 'json',
   cache: false,
   data: { 'id': id },
   success: function (results) {
        alert(results)
   },
   error: function () {
    alert('Error occured');
   }
   });
   }

Controller Method to call

[HttpGet]
  public JsonResult AddToCart(string id)
  {
    string newId = id;
     return Json(newId, JsonRequestBehavior.AllowGet);
  }
1 голос
/ 06 сентября 2012

Вы можете настроить element с помощью

value="@model.productId"

и

onclick= addToWishList(this.value);

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