我在mvc 4实体框架中有一个项目,并使用ajax调用控制器方法。 我的问题是当我在本地使用我的应用程序时,网址是"控制器/方法"但是当我发布时,我必须将网址更改为" 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 () {
});
});
答案 0 :(得分:5)
你真的不需要绝对的网址。正确的相对网址很好。
您应该使用Url.Action
辅助方法生成操作方法的正确相对路径。无论您当前的页面/视图如何,这都将生成正确的路径。
url: "@Url.Action("ActionMethodName","YourControllerName")"
如果您的javascript代码位于剃刀视图中, Url.Action
辅助方法将起作用。但是如果您的代码位于外部js文件中,则应使用Url.Content("~")
辅助方法为您的应用根构建相对URL,并通过变量将其传递给您的js代码,如this post中所述。在这样做时尝试使用javascript命名空间,以防止可能与其他具有相同名称的全局变量冲突/覆盖。
编辑: 将Marko的评论作为替代解决方案。谢谢:)
如果是锚标记,您只需使用所点击链接的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.
});
答案 1 :(得分:0)
当您在js文件中使用它时,您可以执行以下操作:
$("#btnAnswer").click(function () {
var hostString = window.location.protocol + "//" + window.location.host + /";
$.ajax({
url: hostString + "/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 () {
});
});