Skip to main content
 首页 » 编程设计

c#之调用ajax mvc4 c#的绝对路径

2024年01月31日28langtianya

我在 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. 
 
});