0

MVC 4 / Entity Webプロジェクトをラップに落としたことがありますが、これまで使用したことはありません。私はそれを乗り越えていますが、単純なことが本当に私をつまずかせています-データベースのパラメータに基づいてレイアウト内のリンクを非表示にしたり表示したりするようなものです。

HomeControllerで、人がマネージャーかスーパーユーザーかを示すためにViewBagに2つのboolを設定する関数を作成しました。私はその関数を使用して呼び出します

@Html.Action("SetupViewBag", "Home")

<body>これは私のレイアウトのタグの直後にあります。SetupViewBagのコードは次のとおりです。

public void SetupViewBag()
{
   ViewBag.IsManager = ADAccess.IsManager(SessionManager.GetUserName());
   ViewBag.IsSuper = SessionManager.SuperUser();
}

ブレークポイントを設定すると、boolは適切かつ正しい順序で設定されますが、以下のコードを使用してboolにアクセスしようとすると、null不可能な値型であるため、「nullを「bool」に変換できません」というメッセージが表示されます。 '

@{
   if((bool)@ViewBag.IsManager){                       
      <li>@Html.ActionLink("Management", "Management", "Home",null, new { id = "managementLink" })</li>
   }                     
}

私が見逃している本当に単純なものがなければなりません。どんな助けでも大歓迎です。

4

2 に答える 2

2

コメント@Dakine83に基づいて、次のようにコントローラーコンストラクターメソッドでViewBagを設定する必要があります。

public class YourController : BaseController {
    public YourController(){

    }
}

その理由は、アクションメソッドが呼び出されたときにレイアウトページがすでにレンダリングされているためです。nullがある理由ViewBag.IsManager

更新:ベースコントローラーを使用する

public class BaseController : Controller {
    public BaseController() {
            ViewBag.IsManager = ADAccess.IsManager(SessionManager.GetUserName());
    }
}
于 2013-03-26T06:42:54.390 に答える
1

これがうまくいくことを願っています。一度試してみてください@Html.ActionLink( "Management"、 "Management"、 "Home"、new {id = false}、null);

ありがとう

于 2013-03-26T06:38:21.603 に答える