2012-09-24 3 views
0

Je travaille sur une application MVC3. J'ai une certaine logique à mon avis que je veux passer à mon contrôleur. Il affiche dynamiquement un lien ActionLink en fonction de certains aspects du modèle. Les paramètres linkText et actionName pour Html.ActionLink sont la seule chose qui peut différer. J'ai ajouté une méthode pour mon contrôleur qui retourne une JsonResult avec des cordes pour linkText et actionName:Dynamic ActionLink de JsonResult?

[AcceptVerbs(HttpVerbs.Get)] 
public JsonResult GetActionButton(int id) 
{ 
    string action = null; 
    string text = null; 

    // Snipped stuff that sets action and text 

    return Json(new 
    { 
     buttonAction = action, 
     buttonText = text 
    }); 
} 

Où pourrais-je appeler cette méthode pour créer le lien en utilisant les résultats?

+0

est cette méthode appelée par ajax, ou utilisé côté serveur dans une vue, ou les deux? – MrOBrian

+0

@MrOBrian - c'est ce que j'essaie de comprendre - je ne sais pas où le bon endroit pour l'appeler est de pouvoir référencer ses résultats lors de la création du lien. –

+0

Eh bien, puisqu'il s'agit d'un JsonResult, je suppose que vous l'appelez via ajax à partir du client, mais vous avez mentionné vouloir déplacer une certaine logique de la vue vers le contrôleur pour Html.ActionLink, qui serait sur le serveur. Si les liens sont différents selon le modèle, vous voudrez probablement tout faire côté serveur et ne pas utiliser json, mais si les liens changent en fonction de quelque chose qui se passe sur le client, alors vous voudrez utiliser ajax pour retourner un résultat JSON. – MrOBrian

Répondre

2

Pour la génération de lien de regard du contrôleur à UrlHelper Methods, il est préférable d'utiliser Action pour recevoir url normale. Le client avec jquery, vous pouvez créer un lien comme:

$('<a>').attr('href', data.buttonAction).text(data.buttonText) 
+0

C'est le meilleur itinéraire IMO, c'est ce que j'ai utilisé avant quand j'avais besoin de l'URL "rendue" dans le code. – Gromer

1

D'où viennent les ID multiples, je devine dans le modèle de vue?

Peut-être en utilisant jQuery/AJAX sur le document prêt:

$(document).ready(function() { 
    // Handler for .ready() called. 
    // AJAX call to GetActionButton for each enumeration over the ID's in the view model 
}); 
1

Je thiink vous voulez un Helper HTML.

public static MvcHtmlString MyActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName) 
    { 
     string actionLinkHtml = string.Format("<a href=\"/{0}/{1}\">{2}</a>", controllerName, actionName, linkText); 
     return new MvcHtmlString(actionLinkHtml); 
    } 

Bien sûr, il y aura plus de code pour définir vos variables et vos paramètres seront probablement tout le même ID int que vous avez ci-dessus, mais cela est l'idée de base.

Ensuite, en vue simplement utiliser:

@Html.MyActionLink("link text", "action", "ctrlr")