2009-10-22 8 views
0

J'utilise une classe d'aide pour construire mon hyperlien. Le balisage ressemble à ceci:Puis-je créer un lien ActionLink via une classe Helper? Comment?

<a href='/controller/action?id=val'></a> 

C'est le même balisage que le produit Html.ActionLink(). Cependant, si j'utilise le Html.ActionLink(), l'identifiant est accepté comme paramètre dans la méthode à l'intérieur du contrôleur. Si je viens de générer la balise a dans une chaîne comme celle-ci, je reçois l'erreur ci-dessous lorsque je tente de définir la méthode avec un paramètre id:

The parameters dictionary contains a null entry for parameter 'id' 
of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult' 
... 

To make a parameter optional its type should be either a reference  
type or a Nullable type. 
Parameter name: parameters
  1. Est-il possible d'utiliser Html.ActionLink() dans ma classe d'aide ?
  2. Pourquoi y a-t-il une différence entre les deux techniques?

Voici mon action du contrôleur:

public ActionResult AssignmentAdd(int id) 
{ 
    return View(); 
} 
+1

il serait utile que vous avez publié le code de votre appel à l'aide de HTML, la signature de la méthode d'action du contrôleur et la configuration des routes dans glob al.asax parce que tous les trois sont liés. Aussi le message d'erreur/exception que vous obtenez. –

+0

Pouvons-nous voir l'action de votre contrôleur? – Gregoire

Répondre

2

Il semble que vous avez un problème de routage. Je suppose que votre action de contrôleur doit être modifié pour accepter un nombre entier annulable pour le paramètre id:

public ActionResult Action(int? id) 
{ } 

Aussi, si vous avez suivi la table de routage par défaut tel qu'il est généré par le modèle le lien correct pour cette action devrait être:

<a href="/controller/action/val"></a> 

et l'aide pour générer:

<%= Html.ActionLink("link text", "action", new { id = "val" }) %> 
+0

Votre exemple ci-dessus: ActionLink fonctionne pour moi aussi, je me demandais juste si je peux mettre ça ou quelque chose comme ça dans ma classe d'aide (qui est juste une classe partielle)? – Rod

+0

Votre classe d'assistance devrait être une classe statique qui contient des méthodes d'extension HtmlHelper. Dans ce cas, oui, vous pouvez appeler la méthode ActionLink dans votre classe d'assistance parce que vous travaillez avec HtmlHelper! :-) – Charlino

+0

Merci pour la perspicacité. barre. – Rod

Questions connexes