Jim*_*988 2 .net c# razor viewbag
我有一个像这样的控制器:
public ActionResult Index()
{
ViewBag.Title = "Index";
ViewBag.LoggedIn = TheUser.CheckStatus();
return View();
}
Run Code Online (Sandbox Code Playgroud)
事实是,我必须将LoggedIn设置为我的其他函数TheUser.CheckStatus()的输出,以便我可以用razor引用它... Razor有没有办法直接访问函数?例如...
@TheUser.CheckStatus
Run Code Online (Sandbox Code Playgroud)
代替
@ViewBag.LoggedIn
Run Code Online (Sandbox Code Playgroud)
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()
});
}
Run Code Online (Sandbox Code Playgroud)
但是,要回答你的问题:
Razor有没有办法直接访问某个功能?
如果您使用的是ASP.NET成员资格,则可以在请求中使用IsAuthenticated属性,例如
@Request.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)
否则,您需要将此信息传递给视图(无论是通过ViewBag/视图模型等)
或者,您可以编写自己的扩展方法,Request以便您可以直接在视图中访问它:
@Request.UserLoggedIn()
Run Code Online (Sandbox Code Playgroud)
或者甚至作为HtmlHelper例如
public static class HtmlHelperExtensions
{
public static bool UserIsLoggedIn(this HtmlHelper helper)
{
return /* authentication code here */
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,您可以使用@Html.UserIsLoggedIn()我认为您所追求的内容.