ユーザーは認証されていますが、FormsAuthenticationTicketに保存されていてCookieに追加情報が格納されています。[レイアウト]ページのカスタムユーザーデータのモデルを表示
// Custom UserData will contain the following | seperated values:
// [ FullName | ContactNumber1 | ContactNumber2 ]
string userData = fullName + "|" + contactNumber1 + "|" + contactNumber2
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(20),
false,
userData,
FormsAuthentication.FormsCookiePath);
このすべてが正常に動作している
クッキーなどなどを作成します。 MVC 3とレイザー
を使用して
イム私は、ページの上部にフルネーム/ ContactNumberなどなどを表示するfoo.Layout.cshtmlを持っています。
私は、ディスプレイにこれらの値を抽出するためにfoo.Layout.cshtmlの上部にコードを含めることができます
@{
FormsAuthenticationTicket ticket = ((FormsIdentity)User.Identity).Ticket;
// Custom UserData will contain the following | seperated values:
// [ FullName | ContactNumber1 | ContactNumber2 ]
string[] userData = ticket.UserData.Split(new char[] { '|' });
string fullName = userData[0];
string contactNumber1 = userData[1];
string contactNumber2 = userData[2];
}
<div>@fullName</div>
<div>@contactNumber1</div>
<div>@contactNumber2</div>
これは私が、私はいけない私のコントローラでこのコードを含める必要がなく、正直に言うといけないこと私の実際のアプリ(異なる値)のように、私はレイアウトを含む私の意見の大部分の値が必要です。
だから私は私のコントローラ内のコードを含め議論している:
はのviewmodelを作成します。
public class UserViewModel {
public string FullName { get; set; }
public string ContactNumber1 { get; set; }
public string ContactNumber2 { get; set; }
}
はたぶんこれのいくつかは、コントローラの工場内に置くことができコントローラー
public class FooController : Controller {
private readonly _userViewModel = null;
public FooController() {
// NOTE this would actually be behind an interface in some type of
// repository/service pattern and injected but for the sake
// of easy conversation ive put it here.
FormsAuthenticationTicket ticket = ((FormsIdentity)User.Identity).Ticket;
// Custom UserData will contain the following | seperated values:
// [ FullName | ContactNumber1 | ContactNumber2 ]
string[] userData = ticket.UserData.Split(new char[] { '|' });
_userViewModel = new UserViewModel();
userViewModel.FullName = userData[0];
userViewModel.ContactNumber1 = userData[1];
userViewModel.ContactNumber2 = userData[2];
}
public ActionResult Index() {
(HOWEVER_SET_ON_LAYOUT_PAGE) = userViewModel.FullName;
// If not posting ViewModel
(HOWEVER_SET_ON_THIS_PAGE) = userViewModel.FullName;
// If posting ViewModel
return View(_userViewModel);
}
を作成します。 。
他の人がどのようにこの非常に一般的な設定に近づいているかについての議論やアイデアを探しています。
私の実際の作業はレイアウトを介して各ページの上部にユーザーのフルネームを表示し、記入されてから提出されるさまざまなフォームの下部にフルネーム(およびその他のデータ)を表示することです。ポストバック後、フルネームはクッキーから再度読み込まれ、他のフォームフィールドと共に保存されるように送信されます。それは理にかなっていて、本当にその時です: -/
実際の例を教えてください。 –