部署为虚拟目录时,MVC站点外部脚本不起作用

时间:2012-07-24 21:38:06

标签: jquery asp.net-mvc iis

我有一个MVC应用程序。这是我对About.cshtml进行以下更改的基本设置:

@{
    ViewBag.Title = "About Us";
}
<script src=@Url.Content("~/Scripts/test.js") type="text/javascript"></script>
<h2>About</h2>
<p>
     Put content here.
</p>

所以我添加了对外部脚本的引用。

脚本本身包含以下内容:

$(document).ready(function () {

    $.post('/Home/GetResult', null, function (data) {

        alert(data);

    });

});

家庭控制器中调用的方法是:

public int GetResult()
        {
            return 3;
        }

因此,这是一个基本设置,用户点击关于GetResult方法的方法被调用,并弹出一个包含3的警告。

所以我在IIS中将其设置为一个网站,它按预期工作。单击“关于”时,弹出的消息和网站 地址为http://localhost:xx/Home/About

然后我尝试将其设置为虚拟目录。

单击“关于”时,不会弹出任何消息。 它所在的URL是:http://localhost:xx/Practise/Home/About其中practice是虚拟目录的名称。

那么为什么消息不会出现?

现在,如果url包含虚拟目录名,它是否再也找不到该文件了?

如果需要将其作为虚拟目录托管,那么解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您不应该使用硬编码的网址。试试吧

$(document).ready(function () {

    $.post('@Url.Action("GetResult", "Home")', null, function (data) {

        alert(data);

    });

});

始终使用Url辅助函数来处理实际的物理名称

答案 1 :(得分:1)

通常我在这种情况下做的是通过路由在页面中写入URL,并让库使用一个众所周知的变量或在初始化时获取一个对象:

在您的信息页中:

var getResultUrl = '@Url.Action(...)';

在您的脚本文件中:

$(document).ready(function () {
    $.post(getResultUrl, null, function (data) {

        alert(data);
    });
});

你必须小心这样的事情的操作顺序,其中页面脚本需要在include脚本之前运行,或者你需要做一些其他事情来调用它(将它包装在一个函数中)。