C# 为了从控制器访问数据,是否始终必须设置ViewBag变量

C# 为了从控制器访问数据,是否始终必须设置ViewBag变量,c#,.net,razor,viewbag,C#,.net,Razor,Viewbag,我有一个这样的控制器: public ActionResult Index() { ViewBag.Title = "Index"; ViewBag.LoggedIn = TheUser.CheckStatus(); return View(); } 问题是,我必须将LoggedIn设置为我的另一个函数user.CheckStatus()的输出,这样我就可以用razor引用

我有一个这样的控制器:

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

            return View();
        }
问题是,我必须将LoggedIn设置为我的另一个函数user.CheckStatus()的输出,这样我就可以用razor引用它了。。。Razor中是否有直接访问功能的方法?例如

@TheUser.CheckStatus
而不是

@ViewBag.LoggedIn
使用ViewModel类(然后您的视图将是强类型的,并且您将能够使用“经典”帮助程序)


MVC中向视图传递信息的推荐方法是创建特定于该视图的模型(也称为视图模型),例如

但是,要回答您的问题:

Razor中是否有直接访问功能的方法

如果您使用ASP.NET成员身份,则可以在请求中使用属性,例如

 @Request.IsAuthenticated
否则,您确实需要将此信息传递给视图(无论是通过
ViewBag
/view model等)

或者,您可以为
Request
编写自己的扩展方法,该方法允许您在视图中直接访问它:

@Request.UserLoggedIn()
甚至作为
HtmlHelper

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

然后在视图中,您可以使用
@Html.UserIsLoggedIn()
,我认为这是您所追求的。

使用“ViewModel”类而不是ViewBag。对于.NET来说,它们是什么?能给我一些语法示例:D吗
@Request.UserLoggedIn()
public static class HtmlHelperExtensions
{ 
    public static bool UserIsLoggedIn(this HtmlHelper helper)
    {
        return /* authentication code here */
    }
}