2011-03-09 18 views
10

Tengo esta aplicación MVC 3 que tiene un menú desplegable que utilizo para llenar un div mediante jquery. Funciona bien localmente, pero cuando lo despliego al servidor, se redirige incorrectamente. Aquí está mi jquery:Usar jquery post para mvc 3 no funciona cuando se implementó

$("#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 esto funciona bien. Pero cuando se despliega en mi servidor parece estar buscando http://myserver/Home/Category en lugar de http://myserver/mywebsite/Home/Category

Puedo solucionarlo simplemente agregando el nombre de mi aplicación antes de/Home/Category en la función jquery, pero eso no se siente bien ...

También intenté agregar ../, ~ /, ../../ antes de/Home, pero eso no hizo ninguna diferencia.

¿Alguna solución a este problema menor? Gracias!

Respuesta

13

Opción 1

Asumiendo que su método de jQuery está en su punto de vista se puede utilizar Url.Action()

Genera una dirección URL completa a un método acción utilizando la nombre de la acción y el nombre de controlador .

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

O esto si está utilizando la maquinilla de afeitar

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

Opción 2

Si el método está en un js archivo externo que podría declarar una variable global en la vista.

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

y luego en su $.post

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

¡Gracias! Tu primera opción es algo que estaba buscando, pero de alguna manera debe haber hecho mal, ya que no estaba funcionando. ¡Ahora sí! – LanFeusT

+0

¿Alguien sabe por qué no funciona sin URL.action()? – mzonerz

0

No es una respuesta directa, pero así es como lo hago en mi sitio Zend MVC, cuando agrego mi jQuery - fijo una var como la base URL - luego en la llamada ajax, coloca la var en frente de la ruta.

Así que para mí me gustaría hacer:

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

Entonces podría utilizar;

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

Estábamos frente a la misma cuestión cuando desplegamos el código en el servidor, a nivel local que funcionó muy bien lo que esto nos ha ayudado mucho.

Estamos utilizando la maquinilla de afeitar y eso es lo que estábamos haciendo:

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

y que ha sido sustituido con

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

y funciona.

+0

Usar @ Url.Action (..) es siempre una buena decisión con MVC. Nunca cifre la ruta, por lo que puede cambiar las rutas dinámicamente después. – Max

Cuestiones relacionadas