프로파일 값을 할당하는 방법은 무엇입니까?
무엇이 누락되었는지는 모르겠지만 Web.config 파일에 Profile 속성을 추가했지만 Profile에 액세스할 수 없습니다.코드의 항목 또는 새 프로필을 만듭니다.
저도 오늘 같은 문제를 겪었고, 많은 것을 배웠습니다.
Visual Studio에는 "웹 사이트 프로젝트"와 "웹 응용 프로그램 프로젝트"라는 두 가지 종류의 프로젝트가 있습니다.저는 웹 애플리케이션 프로젝트가 프로파일을 직접 사용할 수 없는 이유를 알고 있습니다.강력한 형식의 클래스는 Web.config 파일에서 마법처럼 생성되지 않으므로 사용자가 직접 롤해야 합니다.
웹프로젝트를 하고, MSDN을 .<profile>
귀하의 에대션에 Web.config
그리고 파티를 계속합니다.Profile.
속성이지만 웹 응용 프로그램 프로젝트에서는 작동하지 않습니다.
사용자가 직접 롤할 수 있는 그대로 굴릴 수 있습니다.
웹 프로파일 작성기를 사용합니다.이 도구는 Visual Studio에 추가하여 Web.config의 정의에서 필요한 프로파일 개체를 자동으로 생성하는 사용자 지정 도구입니다.
저는 제 코드가 컴파일할 추가 도구에 의존하는 것을 원하지 않았기 때문에 이 도구가 필요하다는 것을 깨닫지 못하고 다른 사람이 제 코드를 빌드하려고 할 때 문제를 일으킬 수도 있었습니다.
에서 파생되는 자신만의 클래스 만들기ProfileBase
사용자 정의 프로필을 나타냅니다.이것은 보기보다 쉽습니다.다음은 "FullName" 문자열 프로파일 필드를 추가하는 매우 간단한 예입니다.
web.config에서 다음을 수행합니다.
<profile defaultProvider="SqlProvider" inherits="YourNamespace.AccountProfile">
<providers>
<clear />
<add name="SqlProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="sqlServerMembership" />
</providers>
</profile>
AccountProfile.cs 이라는 파일에서:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Profile;
using System.Web.Security;
namespace YourNamespace
{
public class AccountProfile : ProfileBase
{
static public AccountProfile CurrentUser
{
get { return (AccountProfile)
(ProfileBase.Create(Membership.GetUser().UserName)); }
}
public string FullName
{
get { return ((string)(base["FullName"])); }
set { base["FullName"] = value; Save(); }
}
// add additional properties here
}
}
프로파일 값을 설정하는 방법
AccountProfile.CurrentUser.FullName = "Snoopy";
프로필 값을 가져오려면
string x = AccountProfile.CurrentUser.FullName;
웹 응용프로그램 프로젝트는 ProfileCommon 개체를 계속 사용할 수 있지만 런타임에만 사용할 수 있습니다.이에 대한 코드는 프로젝트 자체에서 생성되지 않지만 클래스는 ASP.Net에서 생성되며 런타임에 존재합니다.
개체로 이동하는 가장 간단한 방법은 아래에 설명된 것처럼 동적 유형을 사용하는 것입니다.
Web.config 파일에서 프로파일 속성을 선언합니다.
<profile ...
<properties>
<add name="GivenName"/>
<add name="Surname"/>
</properties>
그런 다음 속성에 액세스합니다.
dynamic profile = ProfileBase.Create(Membership.GetUser().UserName);
string s = profile.GivenName;
profile.Surname = "Smith";
종단 특성의 변경 내용을 저장하는 방법
profile.Save();
동적 유형을 사용하는 데 익숙하고 컴파일 시간 확인 및 인텔리전스가 부족하지 않은 것을 신경 쓰지 않는 경우 위의 기능이 좋습니다.
이것을 ASP.Net MVC와 함께 사용하는 경우 동적 프로파일 개체를 뷰에 전달하면 HTML 도우미 메서드가 동적 "모델" 개체와 잘 작동하지 않으므로 추가 작업을 수행해야 합니다.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
위에서 Joel이 설명한 대로 사용자 정의 프로파일 클래스를 만들면 ASP.Net은 ProfileCommon 클래스를 계속 생성하지만 사용자 정의 프로파일 클래스에서 상속됩니다.사용자 지정 프로파일 클래스를 지정하지 않으면 ProfileCommon이 시스템에서 상속됩니다.웹.프로파일.프로파일 베이스.
고유한 프로파일 클래스를 만드는 경우 사용자 지정 프로파일 클래스에서 이미 선언한 Web.config 파일에 프로파일 속성을 지정하지 않아야 합니다.ASP.Net을 실행하면 ProfileCommon 클래스를 생성하려고 할 때 컴파일러 오류가 발생합니다.
프로파일은 웹 응용프로그램 프로젝트에서도 사용할 수 있습니다.속성은 설계 시 Web.config에 정의하거나 프로그래밍 방식으로 정의할 수 있습니다.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>
또는 프로그래밍 방식으로 종단 횡단을 인스턴스화하고 시스템에 있는 종단 특성 설정 및 종단 특성 설정 컬렉션을 사용하여 개별 특성을 만들어 종단 횡단을 작성합니다.Web.Configuration 네임스페이스입니다.프로파일의 속성을 사용하려면 시스템을 사용합니다.웹.프로파일.프로파일 기본 객체.프로파일 속성을 프로파일로 액세스할 수 없습니다.위에서 언급한 구문이지만 프로파일베이스를 인스턴스화하고 SetPropertyValue("PropertyName") 및 GetPropertyValue{"를 사용하여 쉽게 수행할 수 있습니다.속성 이름")은 다음과 같습니다.
ProfileBase curProfile = ProfileBase.Create("MyName");
또는 현재 사용자의 프로필에 액세스합니다.
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();
Visual Studio에서 새 웹 사이트 프로젝트를 만들면 프로필에서 반환된 개체가 자동으로 생성됩니다.웹 응용 프로그램 프로젝트나 MVC 프로젝트를 만들 때는 자신의 프로젝트를 롤해야 합니다.
이것은 아마도 그것보다 더 어렵게 들릴 것입니다.다음 작업을 수행해야 합니다.
- aspnet_regsql.exe를 사용하여 데이터베이스 생성 이 도구는 .NET 프레임워크와 함께 설치됩니다.
- ProfileGroupBase에서 파생된 클래스를 작성하거나 웹의 정의에서 클래스를 생성할 수 있는 WPB(Web Profile Builder)를 설치합니다.구성. 한동안 WPB를 사용했지만 지금까지 WPB는 기대했던 대로 작동했습니다.속성이 많은 경우 WPB를 사용하면 시간을 상당히 절약할 수 있습니다.
- 데이터베이스에 대한 연결이 웹에서 올바르게 구성되었는지 확인합니다.구성.
- 이제 (컨트롤러에서) 프로파일 클래스의 인스턴스를 생성하도록 설정되었습니다.
- 보기에 프로파일 속성 값이 필요할 수 있습니다.종단 객체 자체를 뷰에 전달하고 싶습니다(개별 속성이 아님).
웹 응용프로그램 프로젝트를 사용하는 경우 설계 시 즉시 프로파일 개체에 액세스할 수 없습니다.여기 http://weblogs.asp.net/joewrobel/archive/2008/02/03/web-profile-builder-for-web-application-projects.aspx 이라는 유틸리티가 있습니다.개인적으로 그 유틸리티로 인해 프로젝트에 오류가 발생하여 ProfileBase에서 상속할 프로파일 클래스를 롤링하게 되었습니다.그것은 전혀 어렵지 않았습니다.
사용자 정의 클래스(예: a)를 만들기 위한 MSDN 설명.Joel의 방법):
http://msdn.microsoft.com/en-us/magazine/cc163624.aspx
저도 같은 문제를 겪고 있었습니다.그러나 ProfileBase에서 상속되는 클래스를 만드는 대신 HttpContext를 사용했습니다.
web.config 파일에서 다음과 같이 속성을 지정합니다.
자, 다음 코드를 쓰세요: -
코드를 컴파일하고 실행합니다.다음과 같은 출력을 얻을 수 있습니다.
웹 프로파일 작성기는 저에게 매우 유용했습니다.생성된 클래스는 Joel의 게시물에서 설명한 것보다 훨씬 더 많은 것을 포함합니다.그것이 실제로 필요한지 또는 유용하지 않은지 나는 모릅니다.
어쨌든 클래스를 생성하기 위한 쉬운 방법을 찾고 있지만 외부 빌드 도구 의존성을 원하지 않는 사람들은 언제든지 가능합니다.
- 웹 프로파일 작성기 사용
- 그것의 모든 흔적을 삭제하세요!
- 생성된 프로파일 클래스 계속 사용
OR(테스트되지 않았지만 작동할 수 있음)
- 웹 사이트 프로젝트 생성
- 요소를 만듭니다.
- 생성된 클래스를 스냅하여 웹 프로젝트 프로젝트에 복사
만약 이 두 번째 접근법이 효과가 있다면, 누군가가 향후 참조를 위해 나에게 알려줄 수 있습니까?
조엘 스폴스키의 대답에 추가하고 싶습니다.
나는 훌륭하게 일하는 그의 해결책을 구현했습니다 - 쿠도스!
내가 사용한 로그인 사용자가 아닌 사용자 프로필을 가져오려는 사용자:
web.config:
<connectionStrings>
<clear />
<add name="LocalSqlConnection" connectionString="Data Source=***;Database=***;User Id=***;Password=***;Initial Catalog=***;Integrated Security=false" providerName="System.Data.SqlClient" />
</connectionStrings>
그리고.
<profile defaultProvider="SqlProvider" inherits="NameSpace.AccountProfile" enabled="true">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="LocalSqlConnection"/>
</providers>
그리고 내 커스텀 클래스:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Profile;
using System.Web.Security;
namespace NameSpace
{
public class AccountProfile : ProfileBase
{
static public AccountProfile CurrentUser
{
get
{
return (AccountProfile)
(ProfileBase.Create(Membership.GetUser().UserName));
}
}
static public AccountProfile GetUser(MembershipUser User)
{
return (AccountProfile)
(ProfileBase.Create(User.UserName));
}
/// <summary>
/// Find user with matching barcode, if no user is found function throws exception
/// </summary>
/// <param name="Barcode">The barcode to compare against the user barcode</param>
/// <returns>The AccountProfile class with matching barcode or null if the user is not found</returns>
static public AccountProfile GetUser(string Barcode)
{
MembershipUserCollection muc = Membership.GetAllUsers();
foreach (MembershipUser user in muc)
{
if (AccountProfile.GetUser(user).Barcode == Barcode)
{
return (AccountProfile)
(ProfileBase.Create(user.UserName));
}
}
throw new Exception("User does not exist");
}
public bool isOnJob
{
get { return (bool)(base["isOnJob"]); }
set { base["isOnJob"] = value; Save(); }
}
public string Barcode
{
get { return (string)(base["Barcode"]); }
set { base["Barcode"] = value; Save(); }
}
}
}
매력적으로 작동하는...
좋은 게시물입니다.
프로파일 요소에서 상속 특성을 지정하지 않으면 아래와 같이 web.config의 프로파일 요소 내에서 각 개별 프로파일 속성을 지정해야 합니다.
<properties>
<clear/>
<add name="property-name-1" />
<add name="property-name-2" />
..........
</properties>
언급URL : https://stackoverflow.com/questions/426609/how-to-assign-profile-values
'programing' 카테고리의 다른 글
FCM 등록 ID 토큰의 최대 길이는 얼마입니까? (0) | 2023.07.06 |
---|---|
VBA Excel 2003에서 "내 문서" 폴더를 가져오는 언어 독립적인 방법 (0) | 2023.07.06 |
IPthon 노트북에서 대화형 matplotlib 창을 열려면 어떻게 해야 합니까? (0) | 2023.07.06 |
Node.js - Mongoose - 컬렉션이 있는지 확인합니다. (0) | 2023.07.06 |
여러 안드로이드 애플리케이션이 동일한 파이어베이스 데이터베이스에 액세스할 수 있습니까? (0) | 2023.07.06 |