2009-08-08 3 views
0

Dans une vue en ASP.NET MVC Je peux accéder aux profils et aux membres profil comme celui-ci:Comment obtenez-vous la variable Profile rempli dans une vue dans ASP.NET MVC?

<%= Profile.Name %> - <%= Profile.Karma %> 

mais comment puis-je obtenir la variable de profil peuplé? Il semble être dans HttpContext.Current.Profile. J'ai écrit une classe profil personnalisé avec une méthode CurrentUser qui ressemble à ceci:

static public Profile CurrentUser { 
    get { 
     return (Profile) (ProfileBase.Create(Membership.GetUser().UserName)); 
    } 
} 

Je cette classe pointée dans mon web.config:

<profile inherits="MyProject.Models.Profile" defaultProvider="AspNetSqlProfileProvider" enabled="true"> 
    <providers> 
     <clear /> 
     <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" applicationName="/" /> 
    </providers> 
</profile> 

Ce:

var p = CurrentUser.Profile 

avec succès me donne le profil, mais je ne peux pas le définir comme ceci:

HttpContext.Profile = CurrentUser.Profile; 

car HttpContext.Profile est en lecture seule. Je reçois l'erreur:

Error 18 Property or indexer 'System.Web.HttpContextBase.Profile' cannot be assigned to -- it is read only C:...\Controller.cs 26 17 MyProject

, je dois aussi le profil à affecter à chaque point de vue, de sorte que le nom de l'utilisateur connecté peut être affiché en haut à droite de la manière habituelle. Comment dois-je le faire?

Répondre

0

La raison pour laquelle j'obtenais un nom vide n'était pas que je n'obtenais pas le profil, mais que le profil dans la base de données était effectivement vide (en raison d'un bogue non lié dans mon code). Tout ce dont j'ai parlé était tout ce qu'il fallait pour que le profil fonctionne.

-1

I need the Profile to be assigned for every view, so that the name of the logged in user can be displayed on the top right in the usual way

Vous pouvez créer un contrôle d'ouverture de session et dans le contrôle, écrivez ceci.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<% 
    if (Request.IsAuthenticated) { 
%> 
     Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>! 
     [ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ] 
<% 
    } 
    else { 
%> 
     [ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ] 
<% 
    } 
%> 

L'objet HttpContext possède également une propriété utilisateur.

+0

Vous n'accédez jamais au profil. – Pablo

+0

Je peux mal comprendre votre but ici, puisque vous voulez "le nom de l'utilisateur connecté peut être affiché en haut à droite de la manière habituelle", je viens d'offrir ma façon de le faire. –

+0

Mais c'est le nom d'utilisateur, pas le nom. – Pablo

0

On peut supposer que vous avez défini le fournisseur de profil par défaut dans web.config

<profile defaultProvider="MyCustomProfileProvider"> 
    <properties> 
    <!-- etc. --> 
    </properties> 
</profile> 

ne suis pas sûr MVC, mais pour asp.net standard requis.

+0

Oui, j'ai ça. Je vais l'ajouter à la question. – Pablo