2016-01-13 1 views
0

Cette ligne est en 4.0 MVC.Net vue Razor:Html.ActionLink résolution contrôleur

@Html.ActionLink("Name Of File", "OpenDocument", new { path = Model.Document.path }) 

Cependant, le contrôleur de ce point de vue (nous allons l'appeler FileController) n'a pas de fonction nommée « OpenDocument ».

Un autre contrôleur (appelons-le DocumentController) a la fonction "OpenDocument".

En exécution locale (studio visuel), quelque chose «résout» par magie le contrôleur à utiliser et cela fonctionne. Cependant, sur un autre serveur, il tombe en panne car il ne trouve pas la fonction dans "FileController". D'après ma compréhension de @ Html.ActionLink, si vous ne spécifiez pas le nom du contrôleur, il prend le contrôleur du formulaire ... ai-je tort?

Quelles configurations dans une application MVC.Net pourraient faire cela?

Merci

Répondre

1

Oui, si vous utilisez le overload qui ne prend que le nom du lien, le nom d'action et les valeurs de la route, il cherchera ce nom d'action à l'intérieur du régulateur de courant pour lequel l'affichage en cours est rendu pour .

Mais vous pouvez utiliser another overload de Html.ActionLink où vous pouvez également spécifier explicitement le nom du contrôleur.

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName, 
    object routeValues, 
    object htmlAttributes 
) 

donc votre code pour générer le lien sera

@Html.ActionLink("Name Of File", "OpenDocument", "Document", 
               new { path = Model.Document.path },null) 
+0

Thx, Oui je sais. Cela résoudrait le problème. Je me demande juste comment l'application peut sauter à un autre contrôleur juste comme ça? – Neb

+0

'Html.ActionLink' va générer le balisage de la balise d'ancrage avec la valeur' href' pointant vers le chemin (que vous passez à la méthode comme nom du contrôleur, nom de l'action, etc.) – Shyju

+0

Je l'ai eu. FileController hérite de DocumentController ... Thx pour répondre à ma première question! – Neb

0

je suis sûr ActionLink ne fonctionne pas soumettre donc en gros, vous devez spécifier le contrôleur pour être reconnu. Quelqu'un me corrige si je me trompe.

Habituellement j'utilise un lien d'action avec ajax pour envoyer mes données.