2011-03-09 7 views
10

Quindi ho questa applicazione MVC 3 che ha un menu a discesa che uso per popolare un div tramite jquery. Funziona bene localmente ma quando lo distribuisco al server viene reindirizzato in modo errato. Ecco la mia jquery:Utilizzo di jquery post per mvc 3 non funziona quando distribuito

$("#ddlCategoryMain").change(function() { 
    $.post("/Home/Category/", { mileID: $(this).val() }, function (data) { 
     refreshDiv($("div#main"), data); 
    }); 
}); 

function refreshDiv(select, data) { 
    select.html(""); 
    select.append(data); 
} 

Localmente questo funziona bene. Ma quando schierato al mio assistente sembra essere alla ricerca di http://myserver/Home/Category invece di http://myserver/mywebsite/Home/Category

posso risolvere il problema semplicemente aggiungendo il nome della mia applicazione prima che il/Home/Categoria nella funzione jquery, ma che non si sente bene ...

Ho anche provato ad aggiungere ../, ~ /, ../../ prima della/home ma ciò non ha fatto differenza.

Qualche soluzione a questo problema minore? Grazie!

risposta

13

Opzione 1

Assumendo che il metodo di jQuery è a suo avviso è possibile utilizzare Url.Action()

Genera un URL completo di un metodo azione utilizzando il nome azione specificata e il nome del controller .

$("#ddlCategoryMain").change(function() { 
    $.post('<%=Url.Action("Category", "Home")%>', { mileID: $(this).val() }, function (data) { 
     refreshDiv($("#main"), data); 
    }); 
}); 

O questo, se si utilizza un rasoio

$("#ddlCategoryMain").change(function() { 
    $.post('@Url.Action("Category", "Home")', { mileID: $(this).val() }, function (data) { 
     refreshDiv($("#main"), data); 
    }); 
}); 

Opzione 2

Se il metodo è in un js file esterno si potrebbe dichiarare una variabile globale nella vista.

var myUrl = '@Url.Action("Category", "Home")'; 

e poi nel vostro $.post

$("#ddlCategoryMain").change(function() { 
    $.post(myUrl , { mileID: $(this).val() }, function (data) { 
     refreshDiv($("#main"), data); 
    }); 
}); 
+0

Grazie! La tua prima opzione è qualcosa che stavo cercando ma in qualche modo deve aver fatto male perché non funzionava. Adesso fa! – LanFeusT

+0

Qualcuno sa perché non funziona senza URL.action()? – mzonerz

0

Non è una risposta diretta, ma questo è come lo faccio sul mio sito Zend MVC, quando aggiungo il mio jQuery - Ho impostato un var come base URL: quindi nella chiamata Ajax, posiziona la var davanti al percorso.

Quindi per me che vorrei fare:

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

quindi ho potuto usare;

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

Stavamo affrontando lo stesso problema quando abbiamo implementato il codice sul server, a livello locale ha funzionato davvero bene quindi questo ci ha aiutato molto.

Stiamo usando il rasoio e questo è quello che stavamo facendo:

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

e ora sostituito con

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

e funziona.

+0

Utilizzare @ Url.Action (..) è sempre una buona decisione con MVC! Non inserire mai il codice nel percorso, quindi è possibile modificare dinamicamente i percorsi successivamente. – Max

Problemi correlati