2016-07-21 10 views
0

Ich beginne gerade mit .NET und baue eine Testanwendung. Ich habe derzeit die Homepage mit einer DefaultController und einer Index() Aktionsmethode festgelegt. Dies funktioniert wie erwartet, und die Homepage ist einfach www.domain.com.MVC ActionLink-Ratschlag

Ich habe 2 neue Seiten (AGB und Datenschutz) unter der gleichen DefaultController, mit Terms() und Privacy() Aktionsmethoden erstellt.

Ich möchte zu diesen mit der URL als www.domain.com/terms und www.domain.com/privacy.

Wenn ich eine <li>@Html.ActionLink("Terms of Service", "Terms", "Default")</li> benutze es funktioniert, aber es dauert mich auf die URL unter www.domain.com/Default/privacy.

Sollte ich separate Controller für jede dieser Seiten erstellen, oder verwende ich den @html.ActionLink Helfer falsch? Ich habe zuvor <li><a href="~/privacy">Privacy Policy</a></li> verwendet, aber ich verstehe, dass dies nicht die beste Praxis ist?

Gibt es auch eine Möglichkeit, Links als Kleinbuchstaben zu erzwingen?

Mein Controller-Code:

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

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

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

Sie brauchen keinen weiteren Controller, wenn Sie diese Seiten in den 'DefaultController' legen und Ihre Helfer für den Aktionslink richtig aussehen –

+0

können Sie Ihren Controller Code posten? –

+0

Controller-Code oben hinzugefügt. Es ist derzeit alles sehr einfach – Gavin5511

Antwort

3

Wenn diese in der HomeController waren glaube ich nicht, dass Sie das gleiche Problem haben würde. Um dies Aber ich denke, Sie mit der RouteConfig Datei erhalten können:

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

Ich habe es versucht, und es funktioniert für mein Beispiel oben, aber dann ändert es das Routing für alle anderen Controller. Gibt es eine Möglichkeit, eine Route nur für den DefaultController und nichts anderes? – Gavin5511

+0

@ Gavin5511 Sie können das Standard-Routing verlassen, aber definieren Sie zuerst – ediblecode

+0

Ok groß. Gibt es eine Chance, dass du deine Antwort aktualisieren kannst, um zu zeigen, wie ich das machen kann? – Gavin5511

0

Sie Routing bestimmte Routen zu Endpunkten geben Attribut verwenden können.

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

In Ihrem RouteConfig.cs müssen Sie Attribut-Routing mit der folgenden Codezeile aktivieren: routes.MapMvcAttributeRoutes();

Jetzt URLs erzeugt mit @Url.Action() oder @Html.ActionLink sollte URLS als domain.com/privacy und domain.com/terms erzeugen