Как получить переменную Profile, заполненную в представлении в ASP.NET MVC? - PullRequest
0 голосов
/ 08 августа 2009

В представлении в ASP.NET MVC я могу получить доступ к профилю и элементам профиля следующим образом:

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

но как мне заполнить переменную Profile? Вроде бы в HttpContext.Current.Profile. Я написал собственный класс Profile с методом CurrentUser, который выглядит следующим образом:

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

В моем файле 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>

Это:

var p = CurrentUser.Profile

успешно дает мне профиль, но я не могу установить его следующим образом:

HttpContext.Profile = CurrentUser.Profile;

потому что HttpContext.Profile только для чтения. Я получаю ошибку:

Ошибка 18 Свойство или индексатор 'System.Web.HttpContextBase.Profile' не могут быть назначены - это только для чтения C: ... \ Controller.cs 26 17 MyProject

Кроме того, мне нужно, чтобы профиль был назначен для каждого просмотра, чтобы имя вошедшего в систему пользователя могло отображаться в правом верхнем углу обычным способом. Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 09 августа 2009

Предположительно, вы установили поставщика профиля по умолчанию в web.config

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

Не уверен насчет MVC, но для стандартного asp.net, который требуется.

0 голосов
/ 10 августа 2009

Причина, по которой я получил пустое имя, была не в том, что я не получал профиль, а в том, что профиль в базе данных был фактически пуст (из-за несвязанной ошибки в моем коде). Все, о чем я говорил, было все, что нужно для работы профиля.

0 голосов
/ 09 августа 2009

Мне нужен профиль для каждый взгляд, так что имя вошедший в систему пользователь может отображаться на вверху справа обычным способом

Вы можете создать элемент управления для входа, а в элементе управления написать это.

<%@ 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") %> ]
<%
    }
%>

Объект HttpContext также имеет свойство пользователя.

...