Utilizar mas de un campo en un HyperLinkField (DataNavigateUrlFields)

Como ya saben, este blog no solo es para informar, sinó para mantener una documentación sobre cosas que voy aprendiendo y descubriendo, y, de esta manera, no olvidarmelas o tener algún lugar de referencia para futuras consultas.


En este caso se trata del control HyperLinkField.
Si suelen utilizar este control a menudo, sabrán que la propiedad DataNavigateUrlFields nos sirve para indicar el nombre del campo de la clase vinculada, que queremos reemplazar en alguna parte de la propiedad DataNavigateUrlFormatString.

A continuación, un ejemplo:

<asp:HyperLinkField DataNavigateUrlFields="IdContacto" DataNavigateUrlFormatString="~/frmEditarContacto.aspx?idcontacto={0}" HeaderText="Editar" Text="Editar Contacto" />


No es muy dificil entender lo que sucede aqui.
Cuando se realice el render de la página, el control buscará la propiedad IdContacto, tomara su valor, y lo reemplazará en {0}, en la propiedad DataNavigateUrlFormatString, por lo que el URL nos quedará de la siguiente manera:
Suponiendo que el valor de IdContacto sea "32":
frmEditarContacto.aspx?idcontacto=32

Hasta ahí todo muy lindo, pero que pasa si quisieramos indicar 2 o más parametros en el mismo link?

La solución es muy sencilla. Solo debemos indicar los nombres de las propiedades en DataNavigateUrlFields, separados por una coma sin espacios, y luego vamos incrementando el indice en la propiedad DataNavigateUrlFormatString.

El Markup nos quedaría de la siguiente manera:

<asp:HyperLinkField DataNavigateUrlFields="IdContacto, IdCiudad" DataNavigateUrlFormatString="~/frmEditarContacto.aspx?idcontacto={0}&idciudad={1}" HeaderText="Editar" Text="Editar Contacto" />


Y siguiendo la lógica de lo antes explicado, el URL final nos quedaría de la siguiente manera:

Suponiendo que el valor de IdContacto sea "32"
Suponiendo que el valor de IdCiudad sea "6"
frmEditarContacto.aspx?idcontacto=32&idciudad=6

Ojalá le sea de utilidad a alguien. Saludos!