私はASP.NET MVCを初めて使用しています。アプリケーション内のすべてのページに共通のデータを渡したい以下はPass data to layout that are common to all pagesです。レイアウトやコントローラで値を取得できません。ビューとコントローラ間で共通のデータを渡す
ユーザがシステムにログインしたときに、フラグ 'UserhasLoggedIn'を設定して別のコントローラアクションにリダイレクトします。レイアウトで、フラグがfalseに設定されていればメニュー項目を表示しないでください。ページがホームインデックスにリダイレクトされると、 'UserhasLoggedIn'フラグは取得されません。
Layout.cshtml:
@using WebApplication2.Models
@model ViewModelBase
<div class="btn-toolbar" style="background-color:dimgrey; padding-left:35px;padding-top:-10px;">
@if (null != Model && (bool)Model.IsuserLoggedIn)
{
foreach (var menuItem in Model.MenuItems)
{
<div class="btn-group">
<button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">menuItem.MenuName <span class="caret"></span></button>
<ul class="dropdown-menu">
@foreach (var subMenu in menuItem.SubMenu)
{
<li>@Html.ActionLink((string)subMenu.MenuName, (string)subMenu.ActionName, (string)subMenu.ControllerName)</li>
}
</ul>
</div>
}
}
<div class="btn-group pull-right" style="padding-right:35px">
@if (null == Model || !(bool)Model.IsuserLoggedIn)
{
<button class="btn btn-primary" onclick="location.href='@Url.Action("Login", "Account")'">Log in</button>
}
else
{
<button class="btn btn-primary" onclick="location.href='@Url.Action("LogOff", "Account")'">Log out </button>
}
</div>
</div>
私は使用することができ、共通のビューモデルを作成しました。
public abstract class ViewModelBase
{
public bool IsuserLoggedIn;
}
LoginViewModel:
public class LoginViewModel : ViewModelBase
{
[Required]
[Display(Name = "Email")]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
HomeViewModel:
public class HomeViewModel : ViewModelBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
AccountControllerログインアクション:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
return RedirectToAction("Index", "Home", new HomeViewModel() { IsuserLoggedIn = true, MenuItems=null });
}
にHomeController indexアクション:真のAにIsUserLoggedInを取得することができませんレイアウトでさえもない。
public ActionResult Index(HomeViewModel baseModel)
{
baseModel.FirstName = "First";
baseModel.LastName = "Last Name";
return View(baseModel);
}
最初はページの読み込み値がfalseの場合です。しかし、ログインが成功すると、アカウントコントローラのログインアクションで値をTrueに設定します。それがモデルとレイアウトに反映されない理由をtrueに設定した後 – user2323308
あなたは答えを読んだことがありますか? 'DefaultModelBinder'が** SET ** itにできないので'Index'メソッドの' IsuserLoggedIn'の値は 'false'です –
Indexメソッドで明示的に値をtrueに設定する必要はありますか? – user2323308