所以我有这个MVC 3应用程序有一个下拉列表,我用来通过jquery填充div。它在本地工作正常,但当我将其部署到服务器时,它的重定向不正确。这是我的jquery:
$("#ddlCategoryMain").change(function () {
$.post("/Home/Category/", { mileID: $(this).val() }, function (data) {
refreshDiv($("div#main"), data);
});
});
function refreshDiv(select, data) {
select.html("");
select.append(data);
}
在当地这种方法很好。但是,当部署到我的服务器时,它似乎正在寻找http://myserver/Home/Category而不是http://myserver/mywebsite/Home/Category
我可以通过简单地在jquery函数中的/ Home / Category之前添加我的应用程序的名称来修复它,但这感觉不对...
我也尝试在/ Home之前添加../,〜/,.. / .. /但这没有任何区别。
这个小问题的解决方案是什么? 谢谢!
答案 0 :(得分:13)
选项1
假设您的jQuery方法在您的视图中,您可以使用Url.Action()
生成一个完全限定的URL action方法使用指定的 动作名称和控制器名称。
$("#ddlCategoryMain").change(function () {
$.post('<%=Url.Action("Category", "Home")%>', { mileID: $(this).val() }, function (data) {
refreshDiv($("#main"), data);
});
});
如果您使用的是剃刀
$("#ddlCategoryMain").change(function () {
$.post('@Url.Action("Category", "Home")', { mileID: $(this).val() }, function (data) {
refreshDiv($("#main"), data);
});
});
选项2
如果方法位于外部js文件中,则可以在视图中声明全局变量。
var myUrl = '@Url.Action("Category", "Home")';
然后在$.post
$("#ddlCategoryMain").change(function () {
$.post(myUrl , { mileID: $(this).val() }, function (data) {
refreshDiv($("#main"), data);
});
});
答案 1 :(得分:2)
当我们在服务器上部署代码时,我们遇到了同样的问题,在本地它工作得很好,所以这对我们很有帮助。
我们正在使用Razor,这就是我们正在做的事情:
$.post("/Home/PostEditProduct/", { } ...
现在替换为
$.post('@Url.Action("PostEditProduct","Home")', { } ...
它有效。
答案 2 :(得分:0)
不是直接的答案,但这是我在Zend MVC网站上的方式,当我添加我的jQuery时 - 我将var设置为基本URL - 然后在ajax调用中,将var放在路径前面
所以我会这样做:
$this->jQuery()->addOnLoad('var baseURL = "'.$this->baseUrl('').'";');
然后我可以使用;
$.post(baseURL+"/Home/Category/"......