2

私はこのようなコントローラーを持っています:

        public ActionResult Index()
        {
            ViewBag.Title = "Index";
            ViewBag.LoggedIn = TheUser.CheckStatus();

            return View();
        }

LoggedInを他の関数TheUser.CheckStatus()の出力に設定して、razorで参照できるようにする必要があります... Razorに関数に直接アクセスする方法はありますか?例えば...

@TheUser.CheckStatus

それ以外の

@ViewBag.LoggedIn
4

2 に答える 2

5

ビューに情報を渡すために MVC で推奨される方法は、そのビューに固有のモデル (別名ビュー モデル) を作成することです。

public class IndexViewModel
{
    public string Title { get; set; }
    public bool IsAuthenticated { get; set; }
}
....
public ActionResult Index()
{
    return View(new IndexViewModel()
    {
        Title = "Index",
        IsAuthenticated = UserIsLoggedIn()
    });
}

ただし、質問に答えるには:

Razor で関数に直接アクセスする方法はありますか?

ASP.NET メンバーシップを使用している場合は、リクエストでIsAuthenticatedプロパティを使用できます。

 @Request.IsAuthenticated

それ以外の場合は、この情報をビューに渡す必要があります ( ViewBag/view モデル経由かどうかなど)。

Requestまたは、ビューで直接アクセスできる独自の拡張メソッドを作成することもできます。

@Request.UserLoggedIn()

またはHtmlHelper例として

public static class HtmlHelperExtensions
{ 
    public static bool UserIsLoggedIn(this HtmlHelper helper)
    {
        return /* authentication code here */
    }
}

次に、あなたの見解では、あなたが求めているものだと思うものを使用@Html.UserIsLoggedIn()できます

于 2013-01-23T15:19:26.283 に答える
4

ViewModel クラスを使用します (ビューは厳密に型指定され、「クラシック」ヘルパーを使用できるようになります)。

//viewModel class
public class UserStatusViewModel {
   public string Title {get;set;}
   public bool IsLogged {get;set;
}


//action
public ActionResult Index() {
  var model = new UserStatusViewModel{ Title = "Index", IsLogged = TheUser.CheckStatus()};
  return View(model);
}

//view

@model UserStatusViewModel

@Html.DisplayFor(m => m.Title)
@Html.DisplayFor(m => m.IsLoggedIn)
于 2013-01-23T15:19:02.640 に答える