0

Webフォームアプリをmvc 4に変換しています。アプリは、マスターページのコードビハインドでかなりの量の処理を行い、ユーザーがロールに基づいて表示できるものと表示できないものを決定し、ページの下部にバージョンを表示しますアセンブリなど。すべてサーバー側。

処理は分離コードではなく、ビューにデータが送信されたコントローラーで行われます。しかし、これが _Layout.cshtml でどのように行われるかは私にはわかりません

どうもありがとう

4

1 に答える 1

0

あなたができるかもしれないことは、ベースコントローラーを使用してOnActionExecutingメソッドをオーバーライドし、ViewBag動的プロパティを使用して値を渡すことです_Layout.cshtml

public abstract class BaseController : Controller
{
   protected override void OnActionExecuting(ActionExecutingContext filterContext)
   {
      var user = filterContext.Controller.ControllerContext.RequestContext.HttpContext.User;
      // do whatever you need to do
      ViewBag.CanUserViewSomethingSecret = user.Identity.Name == "Kermit";
   }
}

このベースコントローラーをアプリケーションコントローラーで拡張する必要があります

public class HomeController : BaseController 
{
    public ActionResult Index()
    {
        return View();
    }
}

次に、次のようにプロパティに_Layout.cshtmlアクセスできます...ViewBag

   @if(ViewBag.CanUserViewSomethingSecret != null && (bool) ViewBag.CanUserViewSomethingSecret == true) 
   {
       <p>Secret</p>
   }
于 2012-09-10T15:34:26.207 に答える