从JavaScript调用ASP.NET MVC操作方法

Mil*_*ara 62 javascript asp.net-mvc razor asp.net-mvc-3

我有这样的示例代码:

 <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>    
Run Code Online (Sandbox Code Playgroud)

如何编写JavaScript代码来调用控制器操作方法?

KMa*_*Man 66

使用jQuery ajax:

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

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

  • 上面的例子有一个语法错误,因为数据后面应该有一个逗号:{id:id},但不幸的是,对我来说修复它是一件很简单的编辑. (6认同)

Mur*_*dız 18

只需使用Javascript调用您的Action方法,如下所示:

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

希望这可以帮助...

  • 不幸的是(除非我离开这里),这将要求您在 .cshtml 文件中包含 JavaScript。就个人而言,我绝对更喜欢我的 js 在它自己的文件中。 (3认同)
  • 这是一个绝妙的解决方案。我总是在所有 .cshtml 文件中使用 JS,因为将 JS 包含在其中是一个很好的做法。 (2认同)

Shy*_*yju 13

您正在调用addToCart方法并传递产品ID.现在您可以使用jQuery ajax将该数据传递给服务器端操作方法

jQuery post是jQuery ajax的简短版本.

function addToCart(id)
{
  $.post('@Url.Action("Add","Cart")',{id:id } function(data) {
    //do whatever with the result.
  });
}
Run Code Online (Sandbox Code Playgroud)

如果你想要更多选项,如成功回调和错误处理,请使用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);

                }    
  });
}
Run Code Online (Sandbox Code Playgroud)

在进行ajax调用时,我强烈建议使用Html辅助方法,例如Url.Action生成操作方法的路径.

如果您的代码位于剃刀视图中,这将起作用,因为Url.Action将由服务器端的razor执行,并且c#表达式将替换为正确的相对路径.但是如果你在外部js文件中使用jQuery代码,你可以考虑这个答案中提到的方法.


arc*_*hil 10

如果您不需要太多自定义并寻求简单性,则可以使用内置方式 - AjaxExtensions.ActionLink方法.

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

必须读取该方法的所有可能重载和AjaxOptions类的参数的MSDN链接.实际上,您可以使用确认,更改http方法,设置OnSuccess和OnFailure客户端脚本等


Sae*_*ati 9

如果您想从JavaScript调用操作,一种方法是在您的视图(.cshtml例如文件)中嵌入JavaScript代码,然后使用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")';
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 对于在 .js 文件中使用此类代码有什么建议吗? (4认同)

小智 5

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);
  }
Run Code Online (Sandbox Code Playgroud)


Des*_*aka 5

使用同一控制器重定向时,只需添加即可

var url = "YourActionName?parameterName=" + parameterValue;
window.location.href = url;
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用不同的控制器, `var url = "YourController/YourActionName?parameterName=" +parameterValue; window.location.href = url;` (2认同)