J'ai une page principale partagée que j'utilise depuis 2 zones différentes dans mon application mvc 2. La page maître a un lien d'action qui spécifie actuellement le contrôleur et l'action, mais bien sûr, le lien ne fonctionne pas si je me trouve dans la mauvaise zone. Je ne vois pas de surcharge pour actionlink qui prend un paramètre de zone, est-il possible de le faire?
Deviner..
Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
Quelque chose que j'ai rencontré juste après cela et que j'imagine que d'autres pourraient rencontrer: Si vous devez créer un lien depuis une zone vers une action ne se trouvant pas dans une zone, vous devez toujours spécifier la zone en tant que chaîne vide.
Par exemple, j'ai déplacé du code MVC dans une zone et j'ai constaté que je devais mettre à jour les URL de la page maître faisant référence à d'autres pages du site.
Pour spécifier une URL à quelque chose qui ne se trouve pas dans une zone, utilisez
Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
Utilisation:
Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)
Note: Le 4ème paramètre est de passer route Values
, si vous passez un paramètre vide, il considérera la structure racine et si vous transmettez une valeur appropriée, il l'utilisera comme zone.
N'oubliez pas non plus d'utiliser null
ou new{}
comme cinquième paramètre car passer null
ou new {}
lors de la création du lien d’action, la méthode ne sera pas surchargée pour (text,action,controller,route data)
ou son (text,action,controller,route data,html attribute)
donc utilisez la bonne méthode
Dans MVC2 donnant area="root"
a travaillé pour moi comme ci-dessous
Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
Une astuce que vous pouvez faire si vous utilisez beaucoup une zone dans une vue est de la définir comme variable en haut:
@{ var awesomeArea = new { area = "Awesome" }; }
@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
Voici ce que j'ai proposé en tant que solution permettant à un utilisateur de se connecter aux systèmes d'authentification prédéfinis.
Chacune de mes zones a une version du fichier _LoginPartial.cshtml.
Je pourrais probablement faire en sorte que l'application utilise une seule version du fichier. Cependant, je rencontrais toujours des erreurs lorsque j'essayais d'utiliser une connexion partielle.
Ce n'est qu'une légère modification du loginpartial généré d'origine, mais il semble bien fonctionner lorsqu'il est utilisé dans des domaines spécifiques.
Voici le code qui est utilisé dans chacun d'eux:
@if (Request.IsAuthenticated)
{
<text>
Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", new { area = "" }, htmlAttributes: new { @class = "username", title = "Manage" })!
@using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" }))
{
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
</text>
}
else
{
<ul>
<li>@Html.ActionLink("Register", "Register", "Account", new { area = "" }, htmlAttributes: new { id = "registerLink" })</li>
<li>@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, htmlAttributes: new { id = "loginLink" })</li>
</ul>
}
Si vous ne pouvez pas utiliser le lien d'application Web standard comme À propos, Accueil, Contac, etc. de la région. Vous changez de ligne
@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})
de
Vues\Shared _Layout.cshtml
Dans mon ASP Net Core, j'ajoute simplement la zone aux attributs html de la manière suivante:
@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })