控制器方法未被调用
A controller method is not called
我为我的站点编写了一些 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
好吧,我不确定它应该如何工作,但甚至没有调用控制器方法..
您正在通过设置 window.location.href
进行重定向,这是一个 GET
操作。您的控制器需要 POST
。你应该做一个表格 post 或一些 ajax 来添加它。 GET
不是将东西添加到购物车的好方法。
该操作具有 HttpPost
属性,这意味着它只会响应 HTTP POST
请求。如果您只是尝试使用 window.location.href = url
访问 URL,它将改为执行 HTTP GET
。所以你会得到一个 404.
从操作中移除 [HttpPost]
属性,或者让您的 Javascript 执行 POST
操作,这在语义上更符合 "add" 一个项目。
完整的解决方案
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; }
}
我为我的站点编写了一些 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
好吧,我不确定它应该如何工作,但甚至没有调用控制器方法..
您正在通过设置 window.location.href
进行重定向,这是一个 GET
操作。您的控制器需要 POST
。你应该做一个表格 post 或一些 ajax 来添加它。 GET
不是将东西添加到购物车的好方法。
该操作具有 HttpPost
属性,这意味着它只会响应 HTTP POST
请求。如果您只是尝试使用 window.location.href = url
访问 URL,它将改为执行 HTTP GET
。所以你会得到一个 404.
从操作中移除 [HttpPost]
属性,或者让您的 Javascript 执行 POST
操作,这在语义上更符合 "add" 一个项目。
完整的解决方案
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; }
}