asp.net - tutorial - owin authentication asp net mvc




Como atribuir valores de perfil? (7)

Não sei o que estou perdendo, mas adicionei as propriedades do perfil no arquivo Web.config, mas não consigo acessar o perfil. Item no código ou crie um novo perfil.


Ótimo post,

Apenas uma nota no web.config se você não especificar o atributo inherit no elemento profile, você precisará especificar cada propriedade do perfil individual dentro do elemento profile no arquivo web.config como abaixo.

 <properties>
    <clear/>
    <add name="property-name-1" />
    <add name="property-name-2" />
    ..........

 </properties>

Eu também estava correndo pelo mesmo problema. Mas, em vez de criar uma classe que herda de ProfileBase, usei o HttpContext.

Especifique propriedades no arquivo web.config da seguinte forma:

Agora, escreva o seguinte código:

Compile e execute o código. Você receberá a seguinte saída: -


O Web Profile Builder funcionou muito bem para mim. A classe que gerou tem muito mais do que a descrita pelo post de Joel. Seja ou não realmente necessário ou útil eu não sei.

De qualquer forma, para quem procura uma maneira fácil de gerar a classe, mas não quer ter uma dependência de ferramenta de compilação externa, você sempre pode

  • use o construtor de perfil da web
  • exclua todo o rastro disto!
  • continue usando a classe Profile gerada

OU (não testado, mas pode funcionar)

  • criar um projeto de site
  • crie seu elemento
  • tirar a classe gerada e copiá-la para o seu projeto de projeto web

se esta segunda abordagem funcionar, alguém pode me informar para referência futura


O perfil também pode ser usado em projetos de aplicativos da Web. As propriedades podem ser definidas no Web.config em tempo de design ou programaticamente. No Web.config:

<profile enabled="true" automaticSaveEnabled="true" defaultProvider="AspNetSqlProfileProvider">
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="TestRolesNProfiles"/>
      </providers>
      <properties>
        <add name="FirstName"/>
        <add name="LastName"/>
        <add name ="Street"/>
        <add name="Address2"/>
        <add name="City"/>
        <add name="ZIP"/>
        <add name="HomePhone"/>
        <add name="MobilePhone"/>
        <add name="DOB"/>

      </properties>
    </profile>

ou Programaticamente, crie a seção de perfil instanciando um ProfileSection e criando propriedades individuais usando ProfilePropertySettings e ProfilePropertySettingsColletion , todos os quais estão no Namespace System.Web.Configuration. Para usar essas propriedades do perfil, use objetos System.Web.Profile.ProfileBase. As propriedades do perfil não podem ser acessadas com o perfil. sintaxe como mencionado acima, mas pode ser facilmente feito instanciando um ProfileBase e usando SetPropertyValue (" PropertyName ") e GetPropertyValue {" PropertyName ") da seguinte maneira:

ProfileBase curProfile = ProfileBase.Create("MyName");

ou para acessar o perfil do usuário atual:

ProfileBase curProfile = ProfileBase.Create(System.Web.Security.Membership.GetUser().UserName);



        curProfile.SetPropertyValue("FirstName", this.txtName.Text);
        curProfile.SetPropertyValue("LastName", this.txtLname.Text);
        curProfile.SetPropertyValue("Street", this.txtStreet.Text);
        curProfile.SetPropertyValue("Address2", this.txtAdd2.Text);
        curProfile.SetPropertyValue("ZIP", this.txtZip.Text);
        curProfile.SetPropertyValue("MobilePhone", txtMphone.Text);
        curProfile.SetPropertyValue("HomePhone", txtHphone.Text);
        curProfile.SetPropertyValue("DOB", txtDob.Text);
        curProfile.Save();

Projetos de aplicativos Web ainda podem usar o objeto ProfileCommon, mas apenas no tempo de execução. O código para ele simplesmente não é gerado no próprio projeto, mas a classe é gerada pelo ASP.Net e está presente no tempo de execução.

A maneira mais simples de chegar ao objeto é usar um tipo dinâmico, conforme demonstrado abaixo.

No arquivo Web.config, declare as propriedades do perfil:

<profile ...
 <properties>
   <add name="GivenName"/>
   <add name="Surname"/>
 </properties>

Então, para acessar as propriedades:

dynamic profile = ProfileBase.Create(Membership.GetUser().UserName);
string s = profile.GivenName;
profile.Surname = "Smith";

Para salvar as alterações nas propriedades do perfil:

profile.Save();

O acima funciona bem se você estiver confortável usando tipos dinâmicos e não se importar com a falta de verificação em tempo de compilação e intellisense.

Se você usar isso com o asp.net MVC você tem que fazer algum trabalho adicional se você passar o objeto de perfil dinâmico para suas exibições desde que os métodos auxiliares de HTML não jogam bem com objetos "modelo" que são dinâmicos. Você terá que atribuir propriedades de perfil a variáveis ​​digitadas estaticamente antes de passá-las aos métodos auxiliares HTML.

// model is of type dynamic and was passed in from the controller
@Html.TextBox("Surname", model.Surname) <-- this breaks

@{ string sn = model.Surname; }
@Html.TextBox("Surname", sn); <-- will work

Se você criar uma classe de perfil personalizada, como Joel descrito acima, o ASP.Net ainda gerará a classe ProfileCommon, mas herdará da sua classe de perfil personalizada. Se você não especificar uma classe de perfil personalizada, o ProfileCommon herdará de System.Web.Profile.ProfileBase.

Se você criar sua própria classe de perfil, certifique-se de não especificar propriedades de perfil no arquivo Web.config que já tenha declarado em sua classe de perfil personalizada. Se você fizer o asp.net dará um erro de compilador quando ele tenta gerar a classe ProfileCommon.


Quando você cria um novo projeto de site no Visual Studio, o objeto retornado do perfil será (automaticamente) gerado para você. Quando você cria um projeto de aplicativo da Web ou um projeto MVC, você terá que rolar o seu próprio.

Isso provavelmente parece mais difícil do que é. Você precisa fazer o seguinte:

  • Criar um banco de dados usando aspnet_regsql.exe Essa ferramenta é instalada junto com o .NET framework.
  • Escreva uma classe que derive de ProfileGroupBase ou instale o Web Profile Builder (WPB) que pode gerar a classe para você a partir da definição em Web.Config. Eu tenho usado o WPB por um tempo e até agora ele fez o que se espera dele. Se você tiver muitas propriedades, o uso do WPB pode economizar um pouco de tempo.
  • Certifique-se de que a conexão com o banco de dados esteja configurada corretamente no Web.Config.
  • Agora você está configurado para criar uma instância de sua classe de perfil (no controlador)
  • Você provavelmente precisará dos valores da propriedade do perfil em suas visualizações. Eu gosto de passar o próprio objeto de perfil ao longo da visão (não propriedades individuais).





profile