从jQuery调用ASP.MVC动作方法

时间:2016-08-04 14:41:35

标签: jquery asp.net-mvc

我试图从jQuery代码调用控制器动作方法,但不知何故它无法正常工作。以下是来自javascript的代码:

$(document).ready(function() { 
    $("#sendOTPSubmit").click(function() {
        $.ajax({
            url: 'Controllers/RegisterSurfaceController/SendOTP',
            success: function(data) { 
                alert(data); 
            },
            statusCode: {
                404: function(content) { 
                    alert('cannot find resource');     
                },
                500: function(content) { 
                    alert('internal server error'); 
                }
            },    
            error: function(req, status, errorObj) {
                // handle status === "timeout"
                // handle other errors
            }
        }); 
    });
});
[HttpPost]
public JsonResult SendOTP()
{            
    CardHolder user = new CardHolder();
    return Json("");
}

我收到以下错误:

  

http://localhost:49289/Controllers/RegisterSurfaceController/SendOTP   404(未找到)

1 个答案:

答案 0 :(得分:2)

首先,您的操作有[HttpPost]属性,因此您需要将type: 'POST'添加到$.ajax选项中。

此外,除非您已经定义了名为'控制器'你不应该在URL中需要该目录,而且你不需要' Controller'后缀也是。试试吧:url: '/RegisterSurface/SendOTP',,就像这样:

$.ajax({
    type: 'POST',
    url: 'RegisterSurface/SendOTP',
    success: function (data) { alert(data); },
    statusCode: {
        404: function (content) { alert('cannot find resource'); },
        500: function (content) { alert('internal server error'); }
    },
    error: function (req, status, errorObj) {
        // handle status === "timeout"
        // handle other errors
    }        
}); 

另请注意,如果上述代码可以在Razor范围内运行,那么您可以使用Url.Action帮助程序为您生成URL:

url: '@Url.Action("SendOTP", "RegisterSurface")',