来自JQuery的404响应调用MVC Action

时间:2015-07-16 01:18:22

标签: jquery asp.net-mvc

尝试从JQuery调用MVC Action时(使用@ Url.Action)我收到404错误

$(function () {
$('#propertyCombo').change(function () {

    var id = $('#propertyCombo option:selected').val();
    alert(id);

    $.post('@Url.Action("PropertyHasChanged", "Bookings"', null, function (data) {
        // handle the server response here
    }).done(function () {
        alert("success");
    }).fail(function (jqXHR, exception) {
        alert(exception);
        alert(jqXHR.status);
        alert(jqXHR.responseText);
    }).error
});

控制器代码是

   public class BookingsController : BaseController
   {
        private ApplicationDbContext db = new ApplicationDbContext();

        public ActionResult PropertyHasChanged()
        {
            return null;
        }

控制器中的断点永远不会被击中,并返回404错误。我尝试在JQuery“BookingsController”中命名“预订”控制器,但这也没有用。

我怀疑这是我遗失的非常基本的东西?

2 个答案:

答案 0 :(得分:2)

我认为在脚本中创建action方法的url存在问题。从您发布的代码中,您错过了Url.Action方法的结束括号。

以下代码应该可以正常工作。

var myUrl='@Url.Action("PropertyHasChanged", "Bookings")';

alert(myUrl);

$.post(myUrl, function (data) {

    alert("response received from server");

    // handle the server response here
});

答案 1 :(得分:1)

你有一些错误......

如果您正在执行[HttpPost],则您的操作需要具有[HttpPost] public ActionResult PropertyHasChanged() { return Content("Success!"); } 属性

$.post()

我知道$.ajax()是简写,但使用$.ajax({ url: "@Url.Action("PropertyHasChanged","Bookings")", type: "POST", data: {id: id} }).done(function(data){ // handle the server response here alert(data); }).fail(function (jqXHR, exception) { alert(exception); alert(jqXHR.status); alert(jqXHR.responseText); }); 版本,这样您就可以看到更轻松的传递方式

public static void main(String [] args) {
    for(int i = 0, j = 0; i < 10; i++, j+=2) {
        System.out.println(i);
        System.out.println(j);
    }
}