MVC中的Jquery ajax POST调用-包括IIS中托管的应用程序名称

MVC中的Jquery ajax POST调用-包括IIS中托管的应用程序名称,jquery,asp.net-mvc,jquery-ajaxq,Jquery,Asp.net Mvc,Jquery Ajaxq,我尝试使用jQueryAjax调用来调用其中一个控制器方法,我使用的方法如下。 但是,在localhost中,URL的格式很好。 我试图在IIS中部署我的应用程序,并将其创建为一个单独的应用程序,因此我的URL如下 但在使用url时:“/Contollername/methodname”-在js文件中的ajx调用中,它在以下位置找到了contoller方法: .——忽略应用程序名称并引发错误 应用程序名称可能因环境而异,因此无法硬编码。请让我知道是否有办法处理这件事 此ajax调用位于单独的j

我尝试使用jQueryAjax调用来调用其中一个控制器方法,我使用的方法如下。 但是,在localhost中,URL的格式很好。 我试图在IIS中部署我的应用程序,并将其创建为一个单独的应用程序,因此我的URL如下

但在使用url时:“/Contollername/methodname”-在js文件中的ajx调用中,它在以下位置找到了contoller方法:

.——忽略应用程序名称并引发错误

应用程序名称可能因环境而异,因此无法硬编码。请让我知道是否有办法处理这件事

此ajax调用位于单独的js文件中


 jQuery.ajax({
                type: "POST",
                url: "/Contoller/MethodName",
                data: JSON.stringify(data),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {

}
});

有多种选择。您描述的情况是使用虚拟路径。MVC Razor视图可以使用tilda键(~/myrelativeurl)处理虚拟路径。我建议让MVC生成URL,然后在Javascript中使用它

一种方法是使用全局Javascript变量来包含MVC为您生成的URL,然后您可以在jQuery调用中使用该URL

<script>
// whole URL
var callUrl = '@Url.Action("myAction", "myController")';
// just the root (this will be the virtual path, if any)
var siteRoot = '@Request.ApplicationPath';
</script>

//整个URL
var callUrl='@Url.Action(“myAction”,“myController”);
//只有根(这将是虚拟路径,如果有的话)
var siteRoot='@Request.ApplicationPath';

编辑:作为一种备份措施,您也可以从当前浏览器窗口获取域+虚拟路径,但这显然不是那么可靠和可维护的。

感谢您的回复:)只是为了确保--在我看来,我将分配:var callUrl='@Url.Action(“myAction”,“myController”);--我可以在独立js中使用它。正确吗?是的,只要您的脚本在内容完成后加载或在文档准备就绪时开始加载。因此,您可以将该代码放在Layout.cshtml的最顶端。