使用jquery post for mvc 3在部署时无法正常工作

时间:2011-03-09 20:51:17

标签: jquery asp.net-mvc

所以我有这个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之前添加../,〜/,.. / .. /但这没有任何区别。

这个小问题的解决方案是什么? 谢谢!

3 个答案:

答案 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/"......