2011-01-03 14 views
19

Me gustaría enviar varios parámetros para una acción en ASP.NET MVC. También me gusta la URL para tener este aspecto:Envío de varios parámetros para acciones en ASP.NET MVC

http://example.com/products/item/2 

en lugar de:

http://example.com/products/item.aspx?id=2 

me gustaría hacer lo mismo para el remitente, así, aquí está la URL actual:

http://example.com/products/item.aspx?id=2&sender=1 

¿Cómo lograr tanto con C# en ASP.NET MVC?

Respuesta

26

Si estás bien con las cosas que pasan en la cadena de consulta, es bastante fácil. Basta con cambiar el método de acción a tomar un parámetro adicional con un nombre coincidente:

// Products/Item.aspx?id=2 or Products/Item/2 
public ActionResult Item(int id) { } 

se convertiría en:

// Products/Item.aspx?id=2&sender=1 or Products/Item/2?sender=1 
public ActionResult Item(int id, int sender) { } 

ASP.NET MVC va a hacer el trabajo de cableado de todo para usted.

Si quieres una URL con un aspecto limpio, sólo hay que añadir la nueva ruta a Global.asax.cs:

// will allow for Products/Item/2/1 
routes.MapRoute(
     "ItemDetailsWithSender", 
     "Products/Item/{id}/{sender}", 
     new { controller = "Products", action = "Item" } 
); 
+0

lo que es el formato de URL? – Reza

+0

No olvides establecer las definiciones apropiadas para la ruta en tu archivo global.asax. –

+0

@Reza: He agregado las URL como comentarios en el código. Si desea una URL más limpia, debe agregar una ruta personalizada a global.asax.cs. –

4

se puede utilizar cualquier regla de ruta, por ejemplo:

{controller}/{action}/{param1}/{param2} 

también puede usar obtener params como :baseUrl?param1=1&param2=2

y verificar this link, espero que lo ayude.

12

Si desea una URL bonita, agregue lo siguiente a su global.asax.cs.

routes.MapRoute("ProductIDs", 
    "Products/item/{id}", 
    new { controller = Products, action = showItem, id="" } 
    new { id = @"\d+" } 
); 

routes.MapRoute("ProductIDWithSender", 
    "Products/item/{sender}/{id}/", 
    new { controller = Products, action = showItem, id="" sender="" } 
    new { id = @"\d+", [email protected]"[0-9]" } //constraint 
); 

Y después de utilizar las acciones necesarias:

public ActionResult showItem(int id) 
{ 
    //view stuff here. 
} 

public ActionResult showItem(int id, int sender) 
{ 
    //view stuff here 
} 
Cuestiones relacionadas