我有一个 MVC 应用程序。这是基本设置,我对 About.cshtml 进行了以下更改:
@{
ViewBag.Title = "About Us";
}
<script <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="493a3b2a74091c3b25670a26273d2c273d" rel="noreferrer noopener nofollow">[email protected]</a>("~/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);
});
});
家庭 Controller 中调用的方法是:
public int GetResult()
{
return 3;
}
因此,这是一个基本设置,用户单击有关调用 GetResult 方法的信息,然后会弹出一个包含 3 的警报。
所以我在 IIS 中将其设置为网站,它按预期工作。单击“关于”时,会弹出消息并显示网站
地址为 http://localhost:xx/Home/About
然后我尝试将其设置为虚拟目录。
单击“关于”时,不会弹出任何消息。
它所在的 URL 为:http://localhost:xx/Practise/Home/About
其中practice 是虚拟目录的名称。
为什么消息没有出现?
现在 url 包含虚拟目录名称,是否无法再找到该文件?
如果需要将其托管为虚拟目录,解决此问题的最佳方法是什么?
最佳答案
您不应该使用硬编码的网址。尝试一下
$(document).ready(function () {
$.post('@Url.Action("GetResult", "Home")', null, function (data) {
alert(data);
});
});
始终使用 Url 辅助函数来为您处理实际的物理名称
关于jquery - 部署为虚拟目录时,MVC 站点外部脚本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639717/