Cómo llamar acciones de controlador utilizando JQuery en ASP.NET MVC

He estado leyendo sobre esto por un tiempo y descubrí que puedes llamar a una acción del controlador usando:

$.ajax("MyController/MyAction", function(data) { alert(data); }); 

¿Esto significa que debería agregar MicrosoftMvcAjax.js o MicrosoftAjax.js junto con Jquery lib?

Además, ¿qué debería contener el segundo parámetro en la función $ .ajax ()?

Por último, ¿hay algún otro enlace en stackoverflow o fuera del sitio que pueda ser útil en asp.net mvc w / ajax y jquery?

Gracias.

Puede comenzar a leer desde aquí jQuery.ajax ()

En realidad, Controller Action es un método público al que se puede acceder a través de Url. Entonces cualquier llamada de una Acción desde una llamada Ajax, ya sea MicrosoftMvcAjax o jQuery se puede hacer. Para mí, jQuery es el más simple. Obtuve muchos ejemplos en el enlace que di más arriba. El ejemplo típico para una llamada ajax es así.

 $.ajax({ // edit to add steve's suggestion. //url: "/ControllerName/ActionName", url: '<%= Url.Action("ActionName", "ControllerName") %>', success: function(data) { // your data could be a View or Json or what ever you returned in your action method // parse your data here alert(data); } }); 

Más ejemplos se pueden encontrar aquí

la respuesta anterior es solo ASP.NET

necesita una referencia a jquery (quizás de un CDN): http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js

y luego un bloque de código similar pero más simple …

 $.ajax({ url: '/Controller/Action/Id', success: function(data) { alert(data); }, statusCode : { 404: function(content) { alert('cannot find resource'); }, 500: function(content) { alert('internal server error'); } }, error: function(req, status, errorObj) { // handle status === "timeout" // handle other errors } }); 

He agregado algunos controladores necesarios, 404 y 500 suceden todo el tiempo si está depurando código. Además, muchos otros errores, como el tiempo de espera, se filtrarán a través del controlador de errores.

Los controladores ASP.NET MVC manejan las solicitudes, por lo que solo debe solicitar la URL correcta y el controlador la recogerá. Este ejemplo de código funciona en entornos distintos de ASP.NET

Podemos llamar al método Controller usando Javascript / Jquery muy fácilmente de la siguiente manera:

Supongamos que seguir es el método del Controlador que se llama devolver una matriz de algunos objetos de clase. Deje que la clase sea ‘A’

 public JsonResult SubMenu_Click(string param1, string param2) { A[] arr = null; try { Processing... Get Result and fill arr. } catch { } return Json(arr , JsonRequestBehavior.AllowGet); } 

Siguiente es el tipo complejo (clase)

  public class A { public string property1 {get ; set ;} public string property2 {get ; set ;} } 

Ahora fue el turno de llamar al método de controlador anterior por JQUERY. A continuación está la función Jquery para llamar al método del controlador.

 function callControllerMethod(value1 , value2) { var strMethodUrl = '@Url.Action("SubMenu_Click", "Home")?param1=value1 &param2=value2' $.getJSON(strMethodUrl, receieveResponse); } function receieveResponse(response) { if (response != null) { for (var i = 0; i < response.length; i++) { alert(response[i].property1); } } } 

En la función Jquery anterior 'callControllerMethod', desarrollamos la URL del método del controlador y la ponemos en una variable llamada 'strMehodUrl' y llamamos al método getJSON de Jquery API.

receieveResponse es la función de callback que recibe la respuesta o el valor de retorno del método de los controladores.

Aquí hicimos uso de JSON, ya que no podemos hacer uso del objeto de la clase C #

directamente en la función javascript, por lo que convertimos el resultado (arr) en el método del controlador en el objeto JSON de la siguiente manera:

 Json(arr , JsonRequestBehavior.AllowGet); 

y devolvió ese objeto Json.

Ahora en la función de callback de JavaScript / JQuery podemos hacer uso de este objeto JSON resultante y trabajar en consecuencia para mostrar los datos de respuesta en la interfaz de usuario.

Para más detalles, haga clic aquí

En respuesta a la publicación anterior, creo que necesita esta línea en lugar de tu línea: –

 var strMethodUrl = '@Url.Action("SubMenu_Click", "Logging")?param1='+value1+' &param2='+value2 

O bien envía las cadenas reales value1 y value2 al controlador.

Sin embargo, para mí, solo llama al controlador una vez. Parece que golpea “receieveResponse” cada vez, pero un punto de quiebre en el método del controlador muestra que solo se golpea la 1ª vez hasta que se actualiza la página.


Aquí hay una solución de trabajo. Para la página cshtml: –

    

Y para el controlador: -

 public class A { public string Id { get; set; } public string Data { get; set; } } public JsonResult SubMenu_Click(string param1, string param2) { A[] arr = new A[] {new A(){ Id = "1", Data = DateTime.Now.Millisecond.ToString() } }; return Json(arr , JsonRequestBehavior.AllowGet); } 

Puede ver que el tiempo cambia cada vez que se llama, por lo que no hay almacenamiento en caché de los valores ...

Puede llamar fácilmente a cualquier acción del controlador usando el método jQuery AJAX de esta manera:

Tenga en cuenta en este ejemplo mi nombre de controlador es Estudiante

Acción del controlador

  public ActionResult Test() { return View(); } 

En cualquier vista de este controlador anterior puede llamar a la acción Test () de esta manera: