私の ajax は .net mvc 4 で間違ったメソッドを呼び出しますが、その理由がわかりません。
私のアヤックス:
function addItem(id, ammount) {
$.ajax({
url: "/Shoppingcart/AddItem?id="+id+"&ammount="+ammount,
type: "post",
cache: false,
success: function (result) {
alert("SUCCESS!!!");
},
error: function (textStatus, errorThrown) {
window.console.log(textStatus, errorThrown);
}
});
}
私のmvcコントローラー:
public class ShoppingcartController : Controller
{
//
// GET: /Shoppingcart/
public ActionResult Index()
{
// Method 1
}
[HttpPost]
public ActionResult AddItem(int id = -1, int ammount = 0)
{
return Redirect("~/Home");
}
}
私の最初のメソッドは ajax によって呼び出されます。/Shoppingcart/AddItem を呼び出しているので、これは奇妙です。
解決策: 問題はメソッドの呼び出しではなく、ルート スタックにありました。どうやら、ルートが定義される順序が重要性に影響を与えます。最も具体的なルートは、常に最初に宣言する必要があります。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Index",
url: "{controller}/{id}",
defaults: new { controller = "Home", action = "Index" },
constraints: new { id = @"\d+" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "ControllerOnly",
url: "{controller}",
defaults: new { controller = "Home", action = "Index", id = 0 }
);
}