2009-08-06 9 views
2

Comment les contrôleurs connaissent-ils les vues à renvoyer? Je pensais que c'était en nommant la convention, mais j'ai vu des exemples, par exemple dans l'application Nerd Dinner, où les noms ne correspondent pas. Où et comment voir cette cartographie? Merci.asp.net mvc - Vues et contrôleurs

Répondre

6
public class EmployeesController 
{ 
    public ViewResult Index() 
    { 
     return View("CustomerName"); 
    } 
} 

recherchera:

Views/Employees/CustomerName.aspx 
Views/Employees/CustomerName.ascx 
Views/Shared/CustomerName.aspx 
Views/Shared/CustomerName.ascx 

C'est à peu près tout ..

Lorsque vous revenez juste vue(); sans spécifier de nom, il a recherché la vue avec le même nom que le controlleraction. Dans ce cas, Index.aspx

+0

Le paramètre que vous transmettez à View(), est-ce que c'est le nom qu'il va chercher? Aussi, y a-t-il un moyen de dire à un contrôleur de rechercher une vue dans une zone spécifique? – Crios

+0

Le paramètre est le nom de la vue, par ex. CustomerName = CustomerName.aspx. Pour autant que je sache, les endroits où mvc regarde est codé en dur, mais vous pouvez le personnaliser en développant un ViewEngine. ViewEngines.Engines.Add (nouveau MyCusyomViewEngine()); //Global.asax.cs –

+0

les emplacements sont en effet codés en dur avec le viewengine par défaut. Et le paramètre est en effet le nom de la vue. Il est recommandé de toujours spécifier le nom de la vue, car vous pouvez le tester de manière unitaire. –

0

Il est basé sur le nom de l'action dans le contrôleur. Voici un exemple:

J'ai un contrôleur nommé UserController.

L'une de mes actions sur ce contrôleur s'appelle Index.

Quand je dis retourner View();

Il regardera dans le répertoire des vues, dans le dossier utilisateur, pour Index.aspx ou Index.ascx

Il se penchera également dans le dossier partagé.

2

Il existe trois façons de spécifier un nom de vue.

Par convention

public ActionResult MyAction { 
    return View() 
} 

Ce cherchera une vue avec le nom de la méthode d'action, alias "MyAction.ascx" ou "MyAction.aspx"

** Par Nom * *

public ActionResult MyAction { 
    return View("MyViewName") 
} 

Ceci recherchera une vue nommée "MyViewName.ascx" ou "MyViewName.aspx".

** Par chemin d'application **

public ActionResult MyAction { 
    return View("~/AnyFolder/MyViewName.ascx") 
} 

Ce dernier ne regarde que dans ce seul endroit, l'endroit que vous avez spécifié.

Questions connexes