调用ajax mvc4 c的绝对路径

时间:2016-01-28 16:14:46

标签: c# ajax entity-framework asp.net-mvc-4 razor

我在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 () {

            });

    });

2 个答案:

答案 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 () {

                });

        });