在 ASP.NET MVC 应用中,jQuery AJAX 调用需要正确设置 URL 以访问控制器动作。URL 的构建方式直接影响请求能否正确路由到目标控制器和方法。
$.ajax({
url: '/ControllerName/ActionName',
type: 'POST',
data: { /* 数据 */ },
success: function(response) {
// 处理响应
}
});
缺点:当应用部署路径改变时容易出错。
Url.Action
在 Razor 视图中生成 URL(推荐)var url = '@Url.Action("ActionName", "ControllerName")';
$.ajax({
url: url,
type: 'POST',
data: { /* 数据 */ },
success: function(response) {
// 处理响应
}
});
优势:自动处理应用程序根路径,适应部署环境变化。
在视图文件中:
<script>
var myApp = myApp || {};
myApp.urls = myApp.urls || {};
myApp.urls.someAction = '@Url.Action("ActionName", "ControllerName")';
</script>
<script src="your-external-script.js"></script>
在外部 JS 文件中:
$.ajax({
url: myApp.urls.someAction,
type: 'POST',
data: { /* 数据 */ },
success: function(response) {
// 处理响应
}
});
在 HTML 元素上:
<button id="myButton" data-url="@Url.Action("ActionName", "ControllerName")">提交</button>
在 JS 中:
$('#myButton').click(function() {
var url = $(this).data('url');
$.ajax({
url: url,
type: 'POST',
data: { /* 数据 */ },
success: function(response) {
// 处理响应
}
});
});
如果需要传递路由参数:
var url = '@Url.Action("ActionName", "ControllerName", new { id = "__id__" })';
url = url.replace('__id__', actualId);
$.ajax({
url: url,
// 其他配置
});
原因:URL 构建不正确,没有考虑应用程序根路径。
解决:使用 Url.Action
而不是硬编码 URL。
原因:尝试从不同域访问 API。 解决:确保同源,或配置 CORS。
原因:URL 中的反斜杠可能导致问题。
解决:使用 Url.Content
或确保 URL 格式正确。
Url.Action
或 Url.Content
方法生成 URL../api/controller
)视图文件 (Index.cshtml):
@{
ViewBag.Title = "AJAX 示例";
}
<button id="loadData" data-url="@Url.Action("GetData", "Sample")">加载数据</button>
<div id="result"></div>
@section scripts {
<script>
$(function() {
$('#loadData').click(function() {
var $button = $(this);
$.ajax({
url: $button.data('url'),
type: 'GET',
dataType: 'json',
success: function(data) {
$('#result').html(data.message);
},
error: function(xhr, status, error) {
$('#result').html('错误: ' + error);
}
});
});
});
</script>
}
控制器 (SampleController.cs):
public class SampleController : Controller
{
public JsonResult GetData()
{
return Json(new { message = "数据加载成功!" }, JsonRequestBehavior.AllowGet);
}
}
这种方法确保了 URL 的正确生成,同时保持了代码的整洁和可维护性。