我在 mvc 4 Entity Framework 中有一个项目,并使用 ajax 调用 Controller 方法。 我的问题是当我在本地使用我的应用程序时,url 是“Controller/Method”但是当我发布时我必须将 url 更改为“http://domain/appName/Controller/Method”
我该怎么做才能获得 ajax url 上的绝对路径???我的 ajax 在 js 文件上,我不能使用像 html.actionlink 这样的函数
例子:
$("#btnAnswer").click(function () {
$.ajax({
url: "http://domain/appName/Controller/method/",
//url: "/Controller/method/",
data: { answer: $("#answer").val(), question_id: $("#question_id").val(), answer_id: $("#answer_id").val() },
success: function (result) {
alert(result);
}
}).error(function () {
}).fail(function () {
});
});
请您参考如下方法:
你真的不需要绝对 url。正确的相对 URL 就可以了。
您应该使用 Url.Action 辅助方法来为您的操作方法生成正确的相对路径。无论您当前的页面/ View 如何,这都会生成正确的路径。
url: "@Url.Action("ActionMethodName","YourControllerName")"
Url.Action 如果您的 javascript 代码位于 razor View 中,则辅助方法将起作用。但是,如果您的代码位于外部 js 文件中,您应该使用 Url.Content("~") 辅助方法构建应用程序根目录的相对 url,并通过变量将其传递给您的 js 代码在 this post 中解释.这样做时尝试使用 javascript 命名空间,以防止可能与其他具有相同名称的全局变量发生冲突/覆盖。
编辑: 包括 Marko 的评论作为替代解决方案。谢谢 :)
如果是 anchor 标签,直接使用被点击链接的href属性值即可。
<a href="@Url.Action("Delete","Product")" class="ajaxLink">Delete</a>
在你的js代码中
$("a.ajaxLink").click(function(e){
e.preventDefault();
var url = $(this).attr("href");
//use url variable value for the ajax call now.
});
如果是任何其他类型的html元素,您可以使用html5数据属性保留目标url并使用jQuery数据方法在您的js代码中检索它。
<div data-url="@Url.Action("Delete","Product")" class="ajaxLink">Delete</div>
在你的js代码中
$(".ajaxLink").click(function(e){
e.preventDefault(); // to be safe
var url = $(this).data("url");
//use url variable value for the ajax call now.
});
