2011-03-09 16 views
10

所以我有這個MVC 3應用程序有一個下拉,我用jquery填充div。它在本地工作正常,但是當我將它部署到服務器時,它的重定向不正確。這裏是我的jquery:使用jQuery發佈mvc 3部署時不工作

$("#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之前添加../,〜/,../../,但這沒什麼區別。

對這個小問題的任何解決方案? 謝謝!

回答

13

選項1

假設你的jQuery的方法是在你的看法,你可以使用Url.Action()

生成一個完全合格的URL到 操作方法使用指定的 操作名稱和控制器名稱。

$("#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); 
    }); 
}); 
+0

謝謝!你的第一個選擇是我正在研究的東西,但不知何故肯定是做錯了,因爲它不工作。現在呢! – LanFeusT

+0

有沒有人知道爲什麼它不工作沒有URL.action()? – mzonerz

0

不是一個直接的答案,但是這是我怎麼做我的Zend MVC的網站,當我加我的jQuery - 我設置一個VAR爲基礎URL - 然後在ajax調用中,將var放在路徑的前面。

所以對我來說,我會做:

$this->jQuery()->addOnLoad('var baseURL = "'.$this->baseUrl('').'";'); 

然後,我可以使用;

$.post(baseURL+"/Home/Category/"...... 
2

當我們在服務器上部署代碼時,我們面臨同樣的問題,本地它的工作非常好,所以這幫助我們很多。

我們正在使用剃刀,這就是我們在做什麼:

$.post("/Home/PostEditProduct/", { } ... 

現在用

$.post('@Url.Action("PostEditProduct","Home")', { } ... 

更換和它的作品。

+0

使用@ Url.Action(..)對於MVC來說總是一個很好的決定!切勿對路徑進行硬編碼,以便您可以在之後動態更改路由。 – Max