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

IT技术 javascript asp.net-mvc asp.net-mvc-3 razor
2021-02-19 12:54:53

我有这样的示例代码:

 <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 代码来调用控制器操作方法?

6个回答

使用 jQuery ajax:

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

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

@Sterno 我排队等待同行评审。感谢您留下您的帖子;它加快了我的故障排除过程。
2021-05-01 12:54:53
完整的网址。
2021-05-03 12:54:53
上面的例子有一个语法错误,因为数据后面应该有一个逗号:{ id: id },但不幸的是,它被认为太琐碎了,我无法修复。
2021-05-11 12:54:53
我应该通过url、完整的 url 还是仅通过操作和控制器输入什么?
2021-05-16 12:54:53

只需使用Javascript调用您的操作方法如下所示:

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

希望这可以帮助...

不幸的是(除非我离开这里),这将要求您在 .cshtml 文件中包含 JavaScript。就个人而言,我绝对更喜欢我的 js 在它自己的文件中。
2021-04-22 12:54:53
这是一个绝妙的解决方案。我总是在我所有的 .cshtml 文件中使用 JS,因为将其包含在其中是一个很好的做法。
2021-04-29 12:54:53
@MuratYildiz;我可以设置 Post 或 Get 吗?
2021-05-03 12:54:53
@dellos 我只用于 GET,但两者都应该没问题。
2021-05-15 12:54:53

您正在调用 addToCart 方法并传递产品 ID。现在您可以使用 jQuery ajax 将该数据传递给您的服务器端操作 method.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.Action 将由服务器端的 razor 执行,并且该 c# 表达式将替换为正确的相对路径。但是,如果您在外部 js 文件中使用 jQuery 代码,则可以考虑此答案中提到的方法

如果你不需要太多的定制并且追求简单,你可以使用内置的方式 - AjaxExtensions.ActionLink 方法来完成

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

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

如果要从 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")';
    });
});
在 .js 文件中使用这种代码有什么建议吗?
2021-04-28 12:54:53