2010-11-02 52 views
7

Tengo que hacer una llamada AJAX en el evento onchange de una lista desplegable que es parte de una vista. En el evento de cambio necesito llamar a la base de datos, hacer algunos cálculos para mostrar la interfaz de usuario y luego usar los cálculos para completar un control de gráfico. La pantalla de la interfaz de usuario está en esta secuencia. Gráfico Lista de categorías desplegables lista de subcategorías con puntaje de calificación Para que pueda necesitar mostrar las clasificaciones de categorías en div3 en el evento de cambio, use la calificación para completar el gráfico. Hecho fácilmente en .NET, pero ¿cómo hacerlo en MVC? La única opción que puedo pensar es crear control de usuario con código detrás, pero eso frustra el propósito de usar MVC. Se agradece cualquier ayuda.Llamada AJAX al evento OnChange en MVC

Respuesta

0

no estoy seguro de entender completamente lo que estás tratando de hacer, pero en el camino MVC Probablemente lo manejaría es encadenar un par de llamadas AJAX. La primera actualiza las clasificaciones de categoría según la selección. Es probable que esto devuelva JSON para que pueda extraer fácilmente los puntajes de calificación. El segundo toma los puntajes de calificaciones devueltos por el primero y llama a una acción que representa el gráfico como HTML, es decir, representa una vista parcial que se devuelve e inserta en el lugar correcto en el documento.

8

Aquí hay una idea general de cómo implementar esto.

<script type="text/javascript"> 
    // assuming you're using jQuery 
    $("#ddlAjax").change(function (event) { 
     $.ajax({ 
      url: "Controller/GetPartialGraph/" + $(this).val(), 
      data: { id = $(this).val() /* add other additional parameters */ }, 
      cache: false, 
      type: "POST", 
      dataType: "html", 

      success: function (data, textStatus, XMLHttpRequest) { 
       $("#divPartialView").html(data); // HTML DOM replace 
      } 
     }); 
    }); 
</script> 

<select id="ddlAjax"> 
    ... list of options 
</select> 


<div id="divPartialView"> 
    <!-- something like this in your ASP.NET View --> 
    <%= Html.RenderPartial("MyPartialView", Model) %> 
</div> 

Aquí está el método de acción de su controlador.

[HttpPost] 
public PartialViewResult GetPartialGraph(int id /* drop down value */) 
{ 
    // do calculations whatever you need to do 
    // instantiate Model object 
    var model = myBusinessLogicService.DoCalculations(id); 

    return PartialView("MyPartialView", model); 
} 

Creo que esta es la respuesta que está buscando.

+0

Para mí funciona, pero yo tenía que solo cambio: "data: {id = $ (this) .val()}" a "data: {id: $ (this) .val()" - Nota: "=" se reemplaza por ":". Gracias. – paweln66

2

Ok, si lo que quieres ia una manera de llamar a un evento onchange cuando un cambio del dropdownlist esto puede ser útil:

@Html.DropDownListFor(
         model => model.SelectedId, 
         new SelectList(ViewBag.Ids, "Id", "Name"), 
         "[All]", 
         new { onchange = "onChangeId();", @id ="municipalityDropDown" } 
         ) 

entonces usted puede tener este código javascript y ajax código. Y aquí hay un ejemplo de un código jax para llamar a un método de acción.

function onChangeId() { 
     jQuery.ajax({ 
      url: '@Url.Action("Action Method Name", "Controller Name")', 
      type: 'POST', 
      contentType: 'application/json', 
      data: JSON.stringify({ data: data2 }), 
      success: function (result) { } 
     }); 
    } 
+0

Parece que no has leído la pregunta. Él no está preguntando cómo activar el código onchange o enviar una solicitud ajax. –

0

Sí, es cierto - único cambio es la sustitución:

onchange = “this.form.submit();” 

con:

onchange = “$(this.form).submit();” 

encontré en this posterior

Cuestiones relacionadas