2016-07-21 2 views
0

Je commence tout juste avec .NET et je construis une application de test. J'ai actuellement la page d'accueil en utilisant un DefaultController, et une méthode d'action Index(). Cela fonctionne comme prévu, et la page d'accueil est simple www.domain.com.MVC ActionLink advice

J'ai créé 2 nouvelles pages (termes et confidentialité) sous le même DefaultController, en utilisant les méthodes d'action Terms() et Privacy().

Je veux être en mesure de naviguer dans ces pages avec l'URL comme www.domain.com/terms et www.domain.com/privacy.

Lorsque j'utilise un <li>@Html.ActionLink("Terms of Service", "Terms", "Default")</li> cela fonctionne, mais cela m'amène à l'URL sur www.domain.com/Default/privacy.

Dois-je créer des contrôleurs séparés pour chacune de ces pages ou est-ce que j'utilise l'assistant @html.ActionLink de façon incorrecte? J'ai déjà utilisé <li><a href="~/privacy">Privacy Policy</a></li> mais je comprends que ce n'est pas la meilleure pratique?

Aussi, est-il un moyen de forcer les liens en minuscules?

Mon code Contrôleur:

public class DefaultController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

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

    public ActionResult Privacy() 
    { 
     return View(); 
    } 
} 
+1

vous n'avez pas besoin d'un autre contrôleur si vous mettez ces pages dans le 'DefaultController' et vos aides semblent corrects pour le ActionLink –

+0

pouvez-vous envoyer votre code de contrôleur? –

+0

Avoir ajouté le code du contrôleur ci-dessus. Il est actuellement très basique – Gavin5511

Répondre

3

Si ceux-ci étaient dans le HomeController je ne crois pas que vous auriez le même problème. Cependant, je pense que vous pouvez contourner ce problème en utilisant le fichier RouteConfig:

routes.MapRoute(
    name: "Default", 
    url: "{Action}/{Id}", 
    defaults: new { controller = "Default", Action = "Index", Id = UrlParameter.Optional } 
); 

routes.MapRoute(
    name: "Generic", 
    url: "{controller}/{Action}/{Id}", 
    defaults: new { Action = "Index", Id = UrlParameter.Optional } 
); 
+0

J'ai essayé ceci, et cela fonctionne pour mon exemple ci-dessus, mais cela change le routage pour tous les autres contrôleurs. Est-il possible de mapper une route juste pour le DefaultController et rien d'autre? – Gavin5511

+0

@ Gavin5511 vous pouvez laisser le routage par défaut, mais définissez ce premier – ediblecode

+0

Ok génial. Avez-vous une chance de mettre à jour votre réponse pour montrer comment je peux faire cela? – Gavin5511

0

Vous pouvez utiliser des attributs de routage pour donner des itinéraires spécifiques aux points d'extrémité.

[Route("terms")] 
public ActionResult Terms() 
{ 
    return View(); 
} 
[Route("privacy")] 
public ActionResult Privacy() 
{ 
    return View(); 
} 

Dans votre RouteConfig.cs vous devez activer l'attribut de routage avec la ligne de code suivante: routes.MapMvcAttributeRoutes();

Maintenant tout urls générés avec @Url.Action() ou @Html.ActionLink devrait générer URLS comme domain.com/privacy et domain.com/terms