2011-10-10 31 views
7

Tengo una aplicación web ASP.NET MVC que se ejecuta en http://localhost/myappname. Desde jQuery, realizo jQuery $ .ajax() llamadas para devolver vistas parciales basadas en alguna acción del usuario. Normalmente llamo esto desde una vista en el mismo controlador que contiene la función que estoy llamando a través de Ajax. Por ejemplo, una vista en mi controlador de Inicio tiene la siguiente función (que funciona bien):jQuery Ajax: URL del controlador MVC de referencia de la raíz de la aplicación

function loadMyPartialView() { 
    $.ajax({ 
     type: 'GET', 
     url: 'Home/GetNavigationTreePV/', 
     success: function (data) { onSuccess(data); }, 
     error: function (errorData) { onError(errorData); } 
    }); 
    return true; 
} 

Esta URL anterior se resuelve a http://localhost/myappname/Home/GetNavigationTreePV y la vista parcial se devuelve correctamente.

Ahora, estoy tratando de usar qUint para probar mis funciones. En este caso de prueba, solo quiero verificar que llego al final de la función y regreso verdadero. He creado un controlador QUNIT y la vista correspondiente (que carga mi unidad JavaScript de prueba). Desde el archivo test.js que contiene mis pruebas unitarias, trato de hacer llamadas a las mismas funciones que están en mis vistas de Inicio, como la anterior. Pero, como ahora me estoy quedando sin el controlador QUNIT, la URL se resuelve en http://localhost/myappname/qunit/Home/GetNavigationTreePV.

He intentado cambiar el URL de mi solicitud de AJAX a /Home/GetNavigationTreePV/ (con la barra diagonal anterior), pero cuando lo hago obtengo la siguiente url http://localhost/myappname/Home/GetNavigationTreePV.

Así que, para ser claros, estoy tratando de escribir mi solicitud de Ajax de una manera que siempre comenzará desde la raíz de mi aplicación MVC, y luego anexar el parámetro url dado en mi función $ .ajax().

¿Hay alguna manera fácil de hacerlo? ¿Estoy hablando de esto de una manera extraña?

Respuesta

10

que fue capaz de lograr esto con el uso de JavaScript recta window.location.pathname. Consulte el siguiente ejemplo:

function loadMyPartialView() { 
    $.ajax({ 
     type: 'GET', 
     url: window.location.pathname + 'Home/GetNavigationTreePV/', 
     success: function (data) { onSuccess(data); }, 
     error: function (errorData) { onError(errorData); } 
    }); 
    return true; 
} 
+0

Esto es exactamente lo que estaba buscando también. Tenía problemas al implementar mi aplicación en IIS, en ese caso la URL mencionada en el archivo js no se resolvía correctamente. – binu

10

creo en su página MVC Vista necesita @ Url.Action

function loadMyPartialView() { 
     $.ajax({ 
      type: 'GET', 
      url: '@Url.Action("GetNavigationTreePV", "Home")', 
      success: function (data) { onSuccess(data); }, 
      error: function (errorData) { onError(errorData); } 
     }); 
     return true; 
    } 

Alternativamente, puede utilizar @ Url.Content

function loadMyPartialView() { 
     $.ajax({ 
      type: 'GET', 
      url: '@Url.Content("~/home/GetNavigationTreePV")', 
      success: function (data) { onSuccess(data); }, 
      error: function (errorData) { onError(errorData); } 
     }); 
     return true; 
    } 

Si esto es en un .js archivo, puede pasar en la URL como

loadMyPartialV IEW ('@ Url.Action ("Home") "GetNavigationTreePV"')

+0

Sin suerte. En ese caso, la URL se resolvió como: https: //localhost/ctsw/qunit/@Url.Action .... – MattW

+0

Necesita que esté en la página MVC View, no en un archivo .js. – Steve

+0

Ahh ok. .. en este caso, creo que puede necesitar hacer esto desde un archivo .js para hacer uso del marco de prueba qUnit. Déjame ver que puedo escribir pruebas unitarias en la vista. – MattW

Cuestiones relacionadas