5
votes

La mise en page ne fonctionne pas sur asp.net core 3.0 pour le profil utilisateur

Sur Asp core 3.0, ma page de mise en page ne fonctionne pas pour un utilisateur lorsqu'il clique sur son profil "Areas / Identity / Pages / Account / Manage / _layout.cshtml"

Lorsque je clique sur l'e-mail par défaut après la connexion, j'obtiens Manage / Index.cshtml mais aucun détail de mise en page. Tout comme la navigation, les liens vers les mots de passe oubliés, etc. ne s'affichent pas. Je n'ai aucune idée de ce qui peut causer cela.

Je l'ai mis contre d'autres projets et vois des écarts et je ne trouve aucune raison pour laquelle ma mise en page ne s'affiche pas.

Zones / Identité / Pages / Compte / Gérer / _layout.cshtml

@{
Layout = "/Views/Shared/_Layout.cshtml";
}

Zones / Identité / Pages / Compte / Gérer / Index.cshtml

@page
@model IndexModel
@{
  ViewData["Title"] = "Profile";
  ViewData["ActivePage"] = ManageNavPages.Index;
}

Zones / Identité / Pages / Compte / _ViewStart.cshtml

@{
Layout = "/Areas/Identity/Pages/_Layout.cshtml";
 }

Essayer de voir ce qui me manque ou tout autre endroit à vérifier pour afficher la page de mise en page.

entrez la description de l'image ici

entrez la description de l'image ici


5 commentaires

Quelle est votre disposition attendue? Par défaut, ce sera Gérer . En général, si vous pouviez vous connecter, vous devriez connaître le mot de passe, pourquoi avez-vous voulu afficher le mot de passe oublié pour la page Manage ?


Je souhaite utiliser la mise en page par défaut lorsque vous créez une nouvelle application principale asp.net. Lorsque vous cliquez sur votre e-mail, vous accédez à votre page de gestion. Je manque ma mise en page par défaut, avec les navigations latérales pour changer le mot de passe, modifier le profil, télécharger les données personnelles, etc. Tout ce que j'obtiens est un formulaire avec e-mail et numéro de téléphone, le Manage / _Layout.cshtml ne rend pas


Partagez-nous votre résultat actuel? Existe-t-il une démo pour reproduire votre problème?


J'ai joint des captures d'écran, la mise en page que je veux n'est pas rendue


Existe-t-il une démo pour reproduire votre problème? Pour le Profile , il se trouve dans _ManageNav.cshtml et utilisé avec <partial name="_ManageNav" /> dans Pages/Account/Manage/_Layout.cshtml .


3 Réponses :


6
votes

J'ai eu le même problème qui, je soupçonne, se produit lorsque vous remplacez l'appel services.AddDefaultIdentity dans startup.ConfigureServices - Dans mon cas, je l'ai remplacé par AddIdentity car j'avais besoin de passer le RoleManager à mes contrôleurs.

Il existe probablement une solution plus élégante à ce problème, mais j'ai renoncé à en chercher une car je trouve que cette toute nouvelle fonctionnalité est mal documentée.

Voici comment j'ai résolu cela:

Je suppose que vous avez déjà échafaudé les pages d'identité - Sinon, veuillez consulter: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-3.0&tabs=visual -studio

Dans la page sous Areas \ Identity \ Pages \ Account \ Manage_Layout.cshtml, modifiez l'emplacement de la mise en page pour:

@page
@model IndexModel
@{
    Layout = "_Layout.cshtml";
}
@{
    ViewData["Title"] = "Profile";
    ViewData["ActivePage"] = ManageNavPages.Index;
}

Maintenant, dans votre page d'index Areas \ Identity \ Pages \ Account \ Manage \ Index.cshtml, vous devez également définir explicitement une page de mise en page:

@{
    Layout = "/Views/Shared/_Layout.cshtml";
}

Vous devrez également définir explicitement cette mise en page dans toutes les autres pages de ce dossier.


2 commentaires

La seconde moitié ne semble plus nécessaire. Il suffit de définir Layout = "/Views/Shared/_Layout.cshtml"; dans Areas\Identity\Pages\Account\Manage\_Layout.cshtml résolu mon problème dans un projet Web MVC Net Core 3.0 (après l'échafaudage de toutes mes pages)


Je ne sais pas quelles sont les différences, mais je suis sur un projet MVC de base 3.1 avec une zone d'identité scaffolded par défaut, et je devais encore ajouter la ligne Layout = dans la page Index . C'est bien sûr après le remplacement des services.AddDefaultIdentity cela fonctionnait bien avant cela.



5
votes

Utilisez AddDefaultUI() dans la classe de démarrage lors de la définition

services.AddIdentity<User, Role>().AddDefaultUI() 


0 commentaires

0
votes

Mise à jour.

Pour résoudre le problème, installez Microsoft.AspCoreNet.Identity.UI package NuGet Microsoft.AspCoreNet.Identity.UI et ajoutez AddIdentity.

 services.AddIdentity<User, IdentityRole>(options => options.SignIn.RequireConfirmedEmail)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders()
    .AddDefaultUI();

Mais cela a un coût. L'ajout de AddDefaultUI () a résolu le problème d'ActivePage, mais il en a créé un autre comme indiqué ci-dessus. AddDefaultUI () a fait disparaître ma disposition générale. J'ai ensuite appliqué les solutions suggérées ci-dessus et j'ai récupéré la mise en page, mais ActivePage a de nouveau disparu.

Au lieu de passer trop de temps, j'ai supprimé tous les fichiers de la zone Identité et j'ai scaffolded Identity. TaDa, ActivePage et ma mise en page fonctionnent parfaitement.

J'utilise .Net Core 5.0.0

https://docs.microsoft.com/en-us/dotnet/core/compatibility/aspnetcore#identity-adddefaultui-method-overload-removed


3 commentaires

Recommandent-ils autre chose? Si oui, quoi?


Eh bien, en attendant, j'ai réalisé que je n'étais pas tout à fait correct. Si vous installez le package nuGet Microsoft.AspCoreNet.Identity.UI (il est mis à jour vers la version 5.0.0) et .AddDefaultUI est à nouveau disponible. Ça a fait l'affaire ... MAIS, j'ai perdu ma mise en page générale. J'ai essayé de résoudre ce problème comme décrit et j'ai récupéré la mise en page, bien que j'ai ensuite perdu l'Activepage ... J'ai donc supprimé la zone d'identité une identité échafaudée ... tada, tout va bien, sauf que du codage supplémentaire est nécessaire ici et là ... btw. J'utilise Core 5.


Pouvez-vous écrire cela dans votre réponse. Peut-être reformulez-le un peu, pour qu'il n'y ait aucune confusion quant à ce qu'il faut faire? :)