2

我有一个 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 包含虚拟目录名称,它就不能再找到文件了吗?

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

4

2 回答 2

1

您不应该使用硬编码的 url。试试看

$(document).ready(function () {

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

        alert(data);

    });

});

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

于 2012-07-24T21:50:18.883 回答
1

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

在您的页面中:

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

在您的脚本文件中:

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

        alert(data);
    });
});

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

于 2012-12-21T18:31:02.000 回答