Mira mi código que he creado en una vista parcial: ¿Hay manera sencilla cómo unir dos valores RouteValueDictionary para pasar parámetros a Html.ActionLink
<% foreach (Customer customerInfo in Model.DataRows) {%>
<tr>
<td>
<%=Html.ActionLink(
customerInfo.FullName
, ((string)ViewData["ActionNameForSelectedCustomer"])
, JoinParameters(customerInfo.id, (RouteValueDictionary) ViewData["AdditionalSelectionParameters"])
, null)%>
</td>
<td>
<%=customerInfo.LegalGuardianName %>
</td>
<td>
<%=customerInfo.HomePhone %>
</td>
<td>
<%=customerInfo.CellPhone %>
</td>
</tr>
<%}%>
Aquí estoy construyendo sencilla tabla que muestra los detalles del cliente.
Como puede ver, en cada fila, estoy tratando de construir un enlace que redirija a otra acción.
Esa acción requiere customerId y algunos parámetros adicionales.
Los parámetros adicionales son diferentes para cada página donde esta vista parcial está siendo utilizada. Entonces, decidí hacer que los métodos de Acción pasen los parámetros adicionales en el ViewData como instancia de RouteValueDictionary.
Ahora, en la vista tengo un problema, necesito pasar customerId y ese RouteValueDictionary juntos en el método Html.ActionLink. Eso me hace pensar en cómo combinar todos los params en un objeto (ya sea un objeto o una nueva instancia de RouteValueDictionary)
Debido a la forma en que lo hace MVC, no puedo crear crear un método en el código subyacente clase (no hay codebihind en MVC) que unirá esos parámetros.
Por lo tanto, yo solía fea manera - se inserta el código en línea:
...script runat="server"...
private RouteValueDictionary JoinParameters(int customerId, RouteValueDictionary defaultValues)
{
RouteValueDictionary routeValueDictionary = new RouteValueDictionary(defaultValues);
routeValueDictionary.Add("customerId", customerId);
return routeValueDictionary;
}
...script...
De esta manera es muy feo para mí, porque no me gusta usar el código en línea en la parte Vista.
Mi pregunta es: ¿hay alguna forma mejor de cómo puedo mezclar los parámetros pasados de la acción (en ViewData, TempData, otros ...) y el parámetro de la vista al construir enlaces de acción.
¿Puedo construir este enlace de otra manera?
Gracias!
respuesta excepcional. +1. Bienvenido a SOF y gracias por la publicación. – JoshYates1980