10
votes

Y a-t-il un moyen simple comment rejoindre deux valeurs routées à recevoir pour passer des paramètres à HTML.ActionLink

Regardez mon code que j'ai créé dans une vue partielle: xxx

ici je construis une table simple qui montrant les détails du client.

Comme vous pouvez le voir, Chaque rangée, j'essaie de créer un lien qui redirigera vers une autre action.

Cette action nécessite la clientèle et certains paramètres supplémentaires.

Les paramètres supplémentaires sont différents pour chaque page où cette vue partielle utilise. Alors, j'ai décidé de rendre les méthodes d'action pour passer que les paramètres supplémentaires dans le ViewData comme par exemple RouteValueDictionary.

, sur le point de vue que j'ai un problème, je dois passer customerId et que RouteValueDictionary ensemble dans Html.ActionLink méthode. Qui me fait comprendre une manière de combiner tous ces paramètres en un objet (objet ou nouvelle instance routée)

en raison de la manière dont le MVC ne le fait, je ne peux pas créer de créer une méthode La classe de codeBeHind (il n'y a pas de codeBiHind en MVC) qui rejoindra ces paramètres.

Donc, j'ai utilisé le code intégré de manière laidée -

... Script runat = "serveur" ... xxx

de cette façon est très moche pour moi, parce que je déteste utiliser le code en ligne dans la partie de vue.

Ma question est - y a-t-il un meilleur moyen de la manière dont je peux mélanger les paramètres passés de l'action (dans la vue, Tempdata, Templdata, autres ...) et le paramètre de la vue lors de la construction des liens d'action.

Peut-être que je peux construire ce lien d'une autre manière?

Merci!


0 commentaires

3 Réponses :


2
votes

Peut-être un moyen simple de faire cela serait de créer une extension d'Urlhelper qui fait quelque chose de similaire à la méthode de votre joinParameters. Quelque chose comme la méthode ci-dessous est un peu plus réutilisable:

<%=Html.ActionLink(
    customerInfo.FullName
    , ((string)ViewData["ActionNameForSelectedCustomer"])
    , Url.AppendRouteValue((RouteValueDictionary) ViewData["AdditionalSelectionParameters"], "customerId", customerInfo.id)
    , null)%>


0 commentaires

10
votes

Écrivez une méthode d'extension pour fusionner le dictionnaire source de la destination.

Url.Action(actionName, controllerName, srcRvd1.Merge(srcRvd2).Extend(srcRvd3));


0 commentaires