2015-05-20 10 views
34

Il problema in Html.ActionLink() è che non è possibile aggiungere altro contenuto HTML all'interno del tag che genera. Per esempio, se si desidera aggiungere l'icona oltre al testo come:Come passare Area in Url.Azione?

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

Utilizzando Html.ActionLink(), è possibile generare solo:

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

Così, per risolvere questo problema, è possibile utilizzare Url.Action() per generare solo l'URL all'interno del tag come:

// 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> 

Quindi, come si fa a passare l'area utilizzando Url.Action()?

Grazie mille in anticipo!

+12

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

+2

Per l'area root 'new {Area =" "}' – Corio

risposta

56

È possibile utilizzare questo Url.Action("actionName", "controllerName", new { Area = "areaName" });

Inoltre, non dimenticare di aggiungere lo spazio dei nomi del controller per evitare un conflitto tra i nomi di zona del regolatore di amministrazione ed i nomi controller di sito.

Qualcosa di simile

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" }) 

nome dell'area di scrittura come attributo HTML con oggetto Anonymus. è possibile utilizzare il metodo di estensione helper actionlink html per ottenere la stessa cosa.