2016-11-08 1 views
0

J'ai l'action suivante:action ne trouve pas son maître ou Voir

public class ArticlesController : Controller 
{ 

    public ActionResult Article01() 
    { 
     return View(); 
    } 
} 

qui retourne la vue et tout semble bien fonctionner.

Maintenant, j'essaie d'ajouter ActionName:

[ActionName("bla-bla-article-1")] 
    public ActionResult Article01() 
    { 
     return View(); 
    } 

maintenant appeler:/article/Article01 retourne

'La ressource ne peut pas être trouvé.'

Maintenant, j'essaie ceci:

[ActionName("bla-bla-article-1")] 
public ActionResult Article01() 
{ 
    return View("~/Content/Views/Articles/Article01.cshtml"); 
} 

Et ici je reçois:

La vue '~/contenu/Vues/Articles/Article01.cshtml' ou son maître était pas Le moteur de vue trouvé ou non prend en charge les emplacements recherchés. Les endroits suivants ont été recherchées: ~/contenu/vues/Articles/Articles01.cshtml

+0

votre action sera sur l'url '/ article/Bla-Bla-article-1' pas'/article/Article01 ' – Liam

+0

Votre deuxième erreur indique que la vue n'existe pas. Si votre contrôleur s'appelle 'Article', vous cherchez dans un dossier Article ** s ** (pluriel) qui est probablement votre problème – Liam

+0

Fondamentalement' return View ("~/Content/Views/Article/Article01.cshtml"); 'devrait répare le – Liam

Répondre

1

Vous devez comprendre que, par défaut, le nom de la méthode est aussi le nom d'action. Mais, une fois que vous remplacez cette convention en utilisant l'attribut [ActionName], l'URL à travers laquelle vous accédez à l'action est également susceptible d'être modifiée.

Dans votre cas, ce serait probablement:

/Articles/Bla-Bla-article-1

Et, lorsque vous utilisez return View() sans préciser le nom de la vue, il est d'être déterminé automatiquement à partir des paramètres de route actuels et après l'application de votre attribut, la valeur sera bla-bla-article-1.

C'est pourquoi vous devez spécifier explicitement:

return View("Article01"); 

Voir MSDN