2011-01-21 9 views
9

Si tengo la siguiente función de jQuery (en un archivo externo):ASP.NET MVC 3 - ¿Podemos usar el enlace de modelo sobre las llamadas jQuery AJAX?

function getResults(field1, field2, field3) { 
    $.get('/Search/GetResults', { id: field1, type: field2, blah: field3 }, function(data) { 
     $('#target').html(data); 
    }); 
} 

que tiene esencialmente un montón de campos del formulario, los envía a un método de acción (que devuelve un PartialViewResult), y se une al resultado a un div de destino

aquí es que el método de acción:

[HttpGet] 
public PartialViewResult GetResults(int id, int type, string blah) 
{ 
    var model = repository.GetResults(id, type, blah); 
    return PartialView("Results", model); 
} 

¿Es posible utilizar aquí enlace de modelos-? Por ejemplo podemos hacer esto:

function getResults(someModel) { 
    $.get('/Search/GetResults', { model: someModel }, function(data) { 
     $('#target').html(data); 
    }); 
} 

Y esto:

[HttpGet] 
public PartialViewResult GetResults(SearchPreferences prefs) 
{ 
    var model = repository.GetResults(prefs); 
    return PartialView("Results", model); 
} 

o debería construir un objeto JSON y pasar eso? Actualmente esos valores se recuperan a través de jQuery individuo DOM llamadas:

var field1 = $('#field1').val(); 
var field2 = $('#field2').val(); 

El objetivo es para reducir/simplificar el código de jQuery. Tengo todas esas llamadas para captar todos los valores, luego tengo que pasarlos a todos como parámetros.

Idealmente, me gustaría pasar un solo objeto.

¿Alguna recomendación?

EDITAR: Sólo se dio cuenta de que puede ser capaz de utilizar el nuevo modelo de unión JSON característica de ASP.NET MVC 3. Leyendo sobre ahora ... (no dude en responder con antelación en el ínterin) .

Respuesta

4

En ASP.NET MVC 3, SÍ! Consulte this link, del propio TheGu.

ASP.NET MVC 3 ahora incluye una función de apoyo a la publicación de basados ​​en JSON parámetros del lado del cliente JavaScript para métodos de acción en el servidor . Esto hace que sea más fácil intercambiar datos entre el cliente y el servidor , y construir front-ends enriquecidos de JavaScript .

+0

lol, acabo de agregar que edito y estoy leyendo la misma publicación en este momento. :) – RPM1984

+0

¡Bonito ... a veces hago lo mismo! – Chaddeus

+0

Es posible que también desee consultar http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx – Chaddeus

1

Si crea una clase que contiene las propiedades que está enviando, la carpeta de modelo predeterminada activará y vinculará los datos a esa clase. En su ejemplo, cree una clase:

public class SearchPreferences 
{ 
    public int id { get; set; } 

    public int type { get; set; } 

    public string blah { get; set; } 
} 

Luego, en su acción puede ser:

[HttpGet] 
public PartialViewResult GetResults(SearchPreferences prefs) 
{ 
    var model = repository.GetResults(prefs); 
    return PartialView("Results", model); 
} 
clave

ellos es tener los nombres en sus $ .Consulte datos coincidan con los nombres de su clase SerachPreferences .

+0

sí, soy consciente de eso, y ** tengo ** esa clase. Pero con este método todavía necesito pasar todos los parámetros individuales, que es lo que trato de evitar. – RPM1984

Cuestiones relacionadas