MVC WebアプリケーションでProfile.Newpropertyへのアクセス
-
13-12-2019 - |
質問
最近、この質問をしました anonユーザー選択方法(例:テーマ選択)。そしてWeb設定内のASP.NETプロファイルとそのプロパティについて学び始めました。私はリンクからの答えを試しましたが、私はprofile.newproperty
にアクセスできませんでしたプロファイル値を割り当てる方法? この質問は、Webアプリケーションがボックスからプロファイルをサポートしていないこと、およびProfileBaseに基づくカスタムモデルを作成する必要があることを指定します。問題は2009年に答えられ、これがまだ同じ場合であるかどうか知りたいと思いました。
ASP.NET 4.0 Webアプリケーションでは、アクセスするときを除き、C#をコードする必要なく、web.configのセクションで定義したプロパティを使用してProfile.Newpropertyにアクセスできます。
解決
私はあなたの質問を見ました、そうです
ここでは、匿名および認証されたユーザープロファイルを使用してMVCのプロファイルを操作するコードを表示します。
出力
匿名ユーザー - プロファイルセットはまだありません
匿名ユーザー - プロファイルセット
認証済みユーザー - プロファイル移行
web.config
<anonymousIdentification enabled="true"/>
<profile inherits="ProfileInWebApplicationMVC1.UserProfile">
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
</profile>
.
UserProfileクラス
public class UserProfile : ProfileBase
{
public static UserProfile GetProfile()
{
return HttpContext.Current.Profile as UserProfile;
}
[SettingsAllowAnonymous(true)]
public DateTime? LastVisit
{
get { return base["LastVisit"] as DateTime?; }
set { base["LastVisit"] = value; }
}
public static UserProfile GetProfile(string userID)
{
return ProfileBase.Create(userID) as UserProfile;
}
}
.
ホームコントローラ
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
var p = UserProfile.GetProfile();
return View(p.LastVisit);
}
[HttpPost]
public ActionResult SaveProfile()
{
var p = UserProfile.GetProfile();
p.LastVisit = DateTime.Now;
p.Save();
return RedirectToAction("Index");
}
.
インデックスビュー
@if (!this.Model.HasValue)
{
@: No profile detected
}
else
{
@this.Model.Value.ToString()
}
@using (Html.BeginForm("SaveProfile", "Home"))
{
<input type="submit" name="name" value="Save profile" />
}
.
そして最後に、あなたが匿名ユーザーの場合あなたはあなた自身のプロフィールを持つことができますあなたがサイトに登録すると、あなたは migrate になる必要があります。あなたの新しいアカウントで使用されます。これは、ASP.NETメンバーシップで、ユーザーがログイン
のときに新しいプロファイルを作成するためです。global.asax、プロファイルを移行するコード
public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
var anonymousProfile = UserProfile.GetProfile(args.AnonymousID);
var f = UserProfile.GetProfile(); // current logged in user profile
if (anonymousProfile.LastVisit.HasValue)
{
f.LastVisit = anonymousProfile.LastVisit;
f.Save();
}
ProfileManager.DeleteProfile(args.AnonymousID);
AnonymousIdentificationModule.ClearAnonymousIdentifier();
Membership.DeleteUser(args.AnonymousID, true);
}
. 所属していません StackOverflow