ASP.NET MVC 5 Ajax控制器调用在发布后无法正常工作

时间:2015-04-08 20:42:47

标签: javascript jquery asp.net ajax asp.net-mvc

我一直致力于ASP.NET MVC 5 Web应用程序,其中包含一个视图,其中包含一个Raphael javascript图像,该图像使用AJAX调用控制器方法来获取初始渲染的一些数据。当我在我自己的机器上本地渲染页面时,一切都按预期执行,页面加载正常。但是,当我将应用程序“发布”到测试服务器时,每当我尝试加载页面时,AJAX调用都会触发“错误”函数。

经过一些研究后,我能够通过将此标记添加到布局页面来解决一些javascript错误:

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

但是,当我尝试使用Ajax调用控制器方法时,它仍然无效。当我看看firebug的问题时,我看到引发的错误是“Boostrap需要JQuery”。我已经搜索了错误,并确保脚本标签的顺序正确 - 在Boostrap之前调用JQuery:

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.10.2.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/boostrap.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/raphael.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/update.js")"></script>

我还检查了文件的权限,它们都有相同的,正确的权限,这让我陷入困境。当我在我的机器上本地运行应用程序时,这些控制器调用完全按预期工作,但是一旦我将应用程序发布到服务器就出错了。

我不确定还有什么可能导致此问题。任何和所有建议将不胜感激!!!

下面是对控制器方法的JQuery调用之一:

function GetESN(area, ID) {
$.ajax({
    url: "/Home/GetESN",
    type: 'POST',
    async: false,
    dataType: 'json',
    cache: false,
    data: { area: area, ID: ID },
    success: function (data) {
        esn = data
    },
    error: function () {
        alert('error occurred');
    }
});

}

如果有更多信息需要,请告诉我。

更新

该问题实际上与网站命名的方式有关 - 它需要格式化为“http://projectname.com/location”。我最终不得不将路径名拆分为“/ location”位的帐户,并在脚本的开头构建了URL。可能不是一个理想的情况,但它适用于我的情况。

2 个答案:

答案 0 :(得分:4)

有可能是你的

"url: "/Home/GetESN",
在网络服务器上

是一个不正确的网址。

尝试添加

<script>    
        rootUrl = '@Url.Content("~")'
</script>

到_Layout.cshtml

然后更新您的js文件,以便使用rootUrl

function GetESN(area, ID) {
$.ajax({
    url: rootUrl + "Home/GetESN", // or url: rootUrl + "/Home/GetESN"
    type: 'POST',
    async: false,
    dataType: 'json',
    cache: false,
    data: { area: area, ID: ID },
    success: function (data) {
        esn = data
    },
    error: function () {
        alert('error occurred');
    }
});

答案 1 :(得分:0)

有两种方法可以实现这一目标。

选项1

在您的ajax调用中如下更改网址,

    url: @Url.Action("GetESN", "Home")

选项2

如果要避免使用剃刀标签助手,这是最佳选择。

  1. 右键单击该项目,然后选择“属性”。

  2. 在属性中,选择名为“ Web”的链接。

  3. 在“ Web”链接中,找到“ Project Url”字段。

  4. 在“项目网址”中,为项目设置名称,如下例。

       Example:- http://localhost:1851/TestApp/
    
  5. 设置项目名称后,选择“创建虚拟目录”。

  6. 在您的Ajax调用中,如下设置URL。

       Example:- url: "TestApp/Home/GetESN"
    
  7. 最后确保以相同的名称发布项目。示例:-TestApp