2015-05-20 8 views
34

Das Problem in Html.ActionLink() besteht darin, dass Sie innerhalb des generierten Tags keinen zusätzlichen HTML-Inhalt hinzufügen können. Zum Beispiel, wenn Sie ein Symbol neben dem Text wie hinzufügen möchten:Wie Pass Bereich in Url.Action?

<a href="/Admin/Users"><i class="fa fa-users"></i> Go to Users</a> 

Mit Html.ActionLink() können Sie nur generieren:

<a href="/Admin/Users">Go to Users</a> 

, also dieses Problem zu beheben, können Sie verwenden Url.Action(), wie es nur die URL innerhalb des Tags zu generieren:

// Here, Url.Action could not generate the URL "/admin/users". So this doesn't work. 
<a href="@Url.Action("", "Users", "Admin")"><i class="fa fa-usesr"></i> Go to Users</a> 

// This works, as we know it but won't pass the Area needed. 
<a href="@Url.Action("", "Users")"><i class="fa fa-users"></i> Go to Users</a> 

Also, wie Sie passieren Sie die Umgebung mit Url.Action()?

Vielen Dank im Voraus!

+12

'Url.Action (" actionName "," controllerName ", neuer {Area =" areaName "});' – haim770

+2

Für den Wurzelbereich 'new {Area =" "} – Corio

Antwort

56

können Sie verwenden diese Url.Action("actionName", "controllerName", new { Area = "areaName" });

Vergessen Sie auch nicht den Namensraum des Controllers hinzuzufügen, um einen Konflikt zwischen dem Admin-Bereich Controller-Namen und dem Site-Controller-Namen zu vermeiden.

So etwas wie dieser

public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Admin_default", 
       "Admin/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional }, 
        new[] { "Site.Mvc.Areas.Admin.Controllers" } 
      ); 
     } 
2
@Url.Action("{action}", "{controller}", new { Area = "areaname" }); 
@Html.ActionLink("LinkName", "{action}", "{controller}", new { area = "{areaname}" }, new { @class = "btn btn-cool" }) 

Schreibbereichsname als HTML-Attribut mit anonymus Objekt. Sie können actionlink html helper extension-Methode verwenden, um die gleiche Sache zu erreichen.