【问题标题】:MVC site extenal scripts don't work when deployed as virtual directoryMVC 站点外部脚本在部署为虚拟目录时不起作用
【发布时间】:2012-07-24 21:38:06
【问题描述】:

我有一个 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);

    });

});

home控制器中调用的方法是:

public int GetResult()
        {
            return 3;
        }

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

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

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

点击关于时不会弹出消息。 它所在的 url 是:http://localhost:xx/Practise/Home/About 其中 practice 是虚拟目录的名称。

那么为什么消息没有出现?

现在url中包含虚拟目录名,是不是找不到文件了?

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

【问题讨论】:

  • 检查 HTML 源代码以查看 .js 文件的加载位置,看看是否可以在浏览器中打开它。尝试将其 URL 更改为 /Practise/Scripts/test.js

标签: jquery asp.net-mvc iis


【解决方案1】:

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

$(document).ready(function () {

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

        alert(data);

    });

});

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

【讨论】:

  • 嗯,它在一个外部 javascript 文件中,所以我不能使用那个助手。这是否意味着如果它是虚拟目录,您就不能将外部 javascript 文件与类似的帖子一起使用?
  • 如何 =@Url.Content("~/Scripts/test.js") 是一个外部脚本?无论如何,您可以让外部脚本访问您的页面,但在这种情况下,您必须对其进行硬编码,以便在移动时遇到所有问题。您最好的选择可能是 IIS URL Rewrite iis.net/download/urlrewrite - 注意,我从未使用过它。
【解决方案2】:

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

在您的页面中:

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

在您的脚本文件中:

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

        alert(data);
    });
});

您必须注意此类内容的操作顺序,其中页面脚本需要在包含脚本之前运行,或者您需要执行其他操作来调用它(将其包装在函数中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多