2010-02-10 86 views
7

Tengo un código ajax para asp.net (no mvc) para llamar a un método web para obtener datos adicionales del servidor para una solicitud. Pero parece que no puedo entender la URL para dar mi JQuery en MVC.¿Cómo llamo a un método de controlador desde JQuery?

<script type="text/javascript" language="javascript"> 
function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
     type:"POST", 
     url:url, 
     data:message, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success:successFunc, 
     error:errorFunc 
     }); 

}; 

no quiero pasar toda la lista de datos relacionados con una lista de selección a cada persona que llega a la página, ya que no todos van a necesitar esta funcionalidad. Así que me gustaría llamar a un controlador o webmethod a través de JQuery, pero parece que no puedo encontrar la forma de abordar la URL en MVC.

me di cuenta de este post: JQuery Ajax call gets resolved to the current Controller Folder, Instead of root Folder

es $ .getJson un método de MVC? ¿Es esta una buena solución para mi caso de uso? Solo necesito devolver una url de cadena o una cadena vacía si no encuentro lo que estoy buscando. ¿Debo incluir un para el método $ .getJSon? ¿Es parte de MVC o parte de JQuery? ¿La barra diagonal va a apuntar a la raíz de la aplicación o al servidor raíz?

+0

MVC no es una biblioteca específica con nombres de funciones reales. Es un patrón * de diseño * ... A menos que Microsoft haya nombrado realmente el marco que ... lo que podrían hacer, pensarlo. La originalidad no es su fuerte. (Búsqueda en Google que ...) - Pero en el punto ... '$ .getJson' es una función jQuery para obtener datos JSON a través de solicitudes AJAX. No tiene nada específico que ver con .Net. – Atli

+0

Una url es siempre una url. No funciona de manera diferente en asp.net mvc. –

+0

@Atli No estoy seguro de a qué parte se refiere, en la parte superior me refería a Asp.net MVC, en la parte inferior me refería a los Asp.net MVC javascripts que vienen empaquetados. – Maslow

Respuesta

0

El problema era la etiqueta webMethod en el controlador, lo que se necesitaba o útiles en asp.net, pero no en asp.net mvc

3

probar este mensaje: Basic AJAX example with ASP.NET MVC?

o esta otra: How to get the Json object for drop down?

Deben darle algunas sugerencias.

En esencia, $ .getJson es un método jQuery, no un MVC uno, pero el uso que desea utilizar en combinación con el controlador MVC devolver un resultado JSON.

+0

@Johannes gracias esta es mi url: '" Ticket/CheckForInstaller "' pero no me encuentran ... mi clase de controlador es 'TicketController' el método es' [WebMethod] public ContentResult CheckForInstaller (int appId) 'pero no lo son t alineado. – Maslow

+0

@Maslow Debe proporcionar el parámetro adecuado para su acción. Su acción es "CheckForInstaller" y requiere "appId".Si esto está registrado en su ruta, simplemente puede llamar a "Ticket/CheckForInstaller/1" ("1" es solo un ejemplo de appId). Si no está registrado, debería ser así: "Ticket/CheckForInstaller? AppId = 1" –

+1

en el ejemplo que está utilizando POST, por lo que "appId" debería ser un parámetro posterior (no visible en la url). –

1

Puede utilizar $ .getJSON (url, [datos], [devolución de llamada (de datos)]) donde los datos son el objeto de datos JSON devuelto.

Alternativamente, puede utilizar $ .post (url, [los datos], [devolución de llamada (de datos)]) donde los datos es que returened cadena de objeto/datos.

url: es la dirección URL relativa a su controlador/acción/script que devuelve JSON/datos de nuevo.

Los anteriores son métodos jQuery y que Shoul poder utilizar si ha incluido el archivo js jQuery.

2

Bueno, mi conjetura es que usted está teniendo problemas con cómo se construyen de URL. Si no tiene una barra antes de la url, será relativa a su url actual. Entonces, si la URL actual es: /Home/Index y tiene un enlace como este: <a href="Ticket/CheckForInstaller">Text</a>, ese enlace apuntará a la siguiente url: /Home/Index/Ticket/CheckForInstaller. Este es siempre el comportamiento en el navegador. Lo mismo sucede si tiene una página en una carpeta en una aplicación webforms. No hay nada diferente con una url mvc asp.net luego con cualquier otro marco web. La url que desea es probablemente esta: /Ticket/CheckForInstaller.

El marco asp.net mvc, sin embargo, suministrarle ayudantes para que no tiene que codificar cualquier URL. Usted puede hacer que de esta manera:

<%=Url.Action("Ticket", "CheckForInstaller")%> 

Pero la única cosa que esto hará es buscar la URL apropiada que apunta a que la acción ("/ entradas/CheckForInstaller", en función de sus rutas) y escribirlo.

1

Esto es lo que he estado haciendo últimamente, y ha estado trabajando muy bien .

  1. obtener la ruta raíz y la almacena en un campo oculto (sustituir [con <)

    [input type = id = valor "URLBase" "oculto" =" <% = Url.Content ("~")%>"/>

  2. Obtener el valor de esa entrada y almacenarlo en js (usando jQuery en este caso)

    _urlBase = $ ("# URLBase") val().;

  3. utilizar esa variable para llamar a los controladores

    $ .ajax ({type: "GET", url: _urlBase + "Controlador/Acción", Tipo de datos: "json"});

Cuestiones relacionadas