Spójrz na mojego kodu, który został utworzony w częściowym widokiem: Czy istnieje prosty sposób, jak połączyć dwie wartości RouteValueDictionary przekazać parametry do 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>
<%}%>
Tutaj buduję prostą tabelę, która pokazuje dane klienta.
Jak widać, w każdym wierszu próbuję utworzyć link, który przekieruje do innej akcji.
To działanie wymaga customerId i kilku dodatkowych parametrów.
Dodatkowe parametry są różne dla każdej strony, z której korzysta ten widok częściowy. Postanowiłem więc, aby metody Action przekazały te dodatkowe parametry w instancji ViewData jako RouteValueDictionary.
Teraz, w widoku Mam problem, muszę przekazać customerId i RouteValueDictionary razem do metody Html.ActionLink. To pozwala mi dowiedzieć się, jak połączyć wszystkie te params w jeden obiekt (obiekt lub nowa instancja RouteValueDictionary)
Ze względu na sposób, w jaki robi to MVC, nie mogę utworzyć metody w kodzie źródłowym klasa (nie ma kodu w MVC), która połączy te parametry.
Więc użyłem brzydkiego sposób - dodaje kod inline:
...script runat="server"...
private RouteValueDictionary JoinParameters(int customerId, RouteValueDictionary defaultValues)
{
RouteValueDictionary routeValueDictionary = new RouteValueDictionary(defaultValues);
routeValueDictionary.Add("customerId", customerId);
return routeValueDictionary;
}
...script...
w ten sposób jest bardzo brzydki dla mnie, bo nienawidzę używać kodu inline w widoku strony.
Moje pytanie brzmi - czy istnieje lepszy sposób, w jaki sposób mogę mieszać parametry przekazane z akcji (w ViewData, TempData, inne ...) i parametr z widoku podczas budowania linków akcji.
Może mogę zbudować ten link w inny sposób?
Dzięki!
Znakomita odpowiedź. +1. Witamy w SOF i dzięki za post. – JoshYates1980