Вызова методов действий ASP.NET в MVC с помощью JavaScript
У меня есть пример кода, как это:
<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 ответов:
использовать jQuery ajax:
function AddToCart(id) { $.ajax({ url: 'urlToController', data: { id: id } }).done(function() { alert('Added'); }); }
просто позвоните Способ Действий С помощью Javascript как показано ниже:
var id = model.Id; //if you want to pass an Id parameter window.location.href = '@Url.Action("Action", "Controller")/' + id;
надеюсь, что это помогает...
вы вызываете метод addToCart и передаете идентификатор продукта. Теперь вы можете использовать jQuery ajax для передачи этих данных в метод действия на стороне сервера.d
jQuery post-это короткая версия jQuery ajax.
function addToCart(id) { $.post('@Url.Action("Add","Cart")',{id:id } function(data) { //do whatever with the result. }); }
Если вы хотите больше вариантов, таких как успешные обратные вызовы и обработка ошибок, используйте 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
чтобы создать путь к вашим методам действий.Это будет работать, если ваш код находится в представлении razor, потому что Url.Действие будет выполняться razor на стороне сервера, и это выражение c# будет заменено правильным относительным путем. Но если вы используете свой код jQuery во внешнем js-файле, вы можете рассмотреть подход, упомянутый в этом ответ.
Если вам не нужно много настройки и искать простоту, вы можете сделать это с помощью встроенного способа -AjaxExtensions.Метод ActionLink.
<div class="cart"> @Ajax.ActionLink("Add To Cart", "AddToCart", new { productId = Model.productId }, new AjaxOptions() { HttpMethod = "Post" }); </div>
эта ссылка MSDN должна быть прочитана для всех возможных перегрузок этого метода и параметров класс AjaxOptions. На самом деле, вы можете использовать подтверждение, изменить метод http, установить сценарии клиентов OnSuccess и OnFailure и так далее
Если вы хотите вызвать действие из вашего JavaScript, один из способов-это внедрить ваш код JavaScript, внутри вашего представления (
.cshtml
file например), а затем, используйте 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")'; }); });
вы можете просто добавить это, когда вы используете тот же контроллер для перенаправления
var url = "YourActionName?parameterName=" + parameterValue; window.location.href = url;
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); }