【问题标题】:A controller method is not called不调用控制器方法
【发布时间】:2018-12-15 06:33:14
【问题描述】:

我为我的网站编写了一些 jQuery 脚本,因此我的控制器方法将被执行 - 好吧,甚至没有调用该方法。似乎一切正常,只是甚至没有调用控制器方法。

这是我的相关代码 - 按钮本身:

<a href="#" data-id="@product.Id" class="btn btn-info btn-lg" style="margin-left:60px">
    <span class="glyphicon glyphicon-shopping-cart"></span> Add to cart
</a><br />

jQuery 脚本:

<script type="text/javascript">
$(".btn.btn-info.btn-lg").click(function(event)
{
      event.preventDefault();
      var url = '@Html.Raw(Url.Action("AddToCart", "Cart", new {idinput = "IDI",amount="AM"}))';
      url = url.replace("AM", $("#amounter").val());
      url = url.replace("IDI", $(this).data("id"));

      window.location.href = url;
});
</script>

请注意,我在名为 CartController 文件的控制器中有以下控制器方法:

[HttpPost]
public ActionResult AddToCart(int idinput, int amount)

一旦我按下按钮,我就会到达:

http://localhost:59463/Cart/AddToCart?idinput=1&amount=44

好吧,我不确定它应该如何工作,但是甚至没有调用控制器方法..

【问题讨论】:

  • 你不能GET 一个带有HttpPost 属性的动作...
  • @DavidG 感谢它的帮助(已解决)

标签: c# jquery asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

该操作具有 HttpPost 属性,这意味着它只会响应 HTTP POST 请求。如果您只是尝试使用 window.location.href = url 访问 URL,它将执行 HTTP GET。所以你会得到一个 404。

从操作中远程删除 [HttpPost] 属性,或者让您的 Javascript 执行 POST 操作,这在语义上更合乎逻辑地“添加”一个项目。

【讨论】:

    【解决方案2】:

    您通过设置window.location.href 进行重定向,这是一个GET 操作。您的控制器需要POST。你应该做一个表单发布或一些 ajax 来添加它。 GET 不是将东西添加到购物车的好方法。

    【讨论】:

      【解决方案3】:

      完整的解决方案

      function AddToCart() {
              var url = "@Url.Action("AddToCart", "Cart")";
              var idinput = $("#idinput").val();
              var amount = $("#amount").val();
              var rate = {
                  idinput: idinput,
                  amount: amount
              };
              rate = JSON.stringify(rate);
              $.ajax({
              type: "POST",
              url: url,
              contentType: "application/json; charset=iso-8859-1",
              data: rate
            });
          }
      public ActionResult AddToCart(Data Data)
      {
         return Json("", JsonRequestBehavior.AllowGet);
      }
      public class Data
          {
              public int idinput { get; set; }
              public int amount { get; set; }
          }
      

      【讨论】:

        猜你喜欢
        • 2017-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-17
        • 2016-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多