2011-04-27 6 views
6

Tengo una situación donde tengo que pasar una lista de objetos a un controlador MVC, pero no estoy seguro de cómo dar formato a esto en la cadena de consulta. La razón por la que quisiera hacer esto es porque esta no es una aplicación web, es un servicio web que acepta datos a través de la cadena de consulta y los enruta a un controlador que hace el trabajo.Pasando Lista de objetos a través de la cadena de consulta al controlador MVC

Así, dada una clase llamada MyParam con propiedades Un & B, ¿cómo puedo construir una cadena de consulta que va a pasar los datos a la siguiente método controlador:

public ActionResult MyMethod(List<MyParam> ParamList) 

He intentado usar el marco MVC para RedirectToAction y RedirectToResult para ver de qué se trata, pero supongo que mi n00bness con MVC me está haciendo cometer un error porque nunca pasa los datos correctamente y MyMethod siempre tiene nulo para el parámetro.

¡Gracias de antemano!

Respuesta

9

Puede encontrar que el following blog post es útil para el formato de conexión de las listas que necesita usar si desea que el archivador de modelo predeterminado analice correctamente la solicitud en una matriz de objetos fuertemente tipada. Ejemplo de cadena de consulta:

[0].Title=foo&[0].Author=bar&[1].Title=baz&[1].Author=pub... 

donde:

public class Book 
{ 
    public string Title { get; set; } 
    public string Author { get; set; } 
} 

se unirá con éxito para:

public ActionResult MyMethod(IEnumerable<Book> books) { ... } 
+0

Se une, pero en realidad no pasa los datos. Acabo de obtener los valores predeterminados para cada objeto. – dudemonkey

+0

@dudemonkey, esto debería funcionar, lo estoy usando casi a diario. Consulte la publicación del blog que proporciona ejemplos específicos y verifique que no tenga errores tipográficos. –

+0

tienes razón. En mi código, no tenía métodos de acceso (get/set) para las propiedades. Una vez que los agregué, funcionó perfectamente. – dudemonkey

0

Ok, basado en la información proporcionada no creo que usted quiere lo que usted piensa que usted desea. En su caso, en el cliente, usted PUBLICA los datos al controlador. No usar una cadena de consulta.

bien, ya que tiene que utilizar la cadena de consulta. mi nueva respuesta: serialize object, conviértalo en base64 string y pásalo, luego vuelve a convertirlo.

+0

Por desgracia, según las necesidades, tiene que ser GET. Todo tiene que pasar a través de la cadena de consulta, ya que será consumido por clientes poco sofisticados. – dudemonkey

+0

Preguntaré por todos lados, pero tomaremos contigo y tus problemas durante el almuerzo. Lo siento. –

+0

Tomaré eso :) Gracias – dudemonkey

0

que he encontrado que la JsonValueProvider funciona mucho mejor que el ValueProvider normal para unirse a una lista. Simplemente convertir sus datos a un objeto JSON de este modo:

<YourRoute>?ParamList=[{SomeProperty:'Value'},{SomeProperty:'Value'}]; 

Y el JsonValueProvider se hará cargo del resto. Esto supone que tiene la capacidad de decir "publicar esta información como Json".

También renuncian si es o no sería una buena idea.

Cuestiones relacionadas