2013-03-05 75 views
0

我有一个mvc4 c#razor web应用程序。 是否可以添加一个可从视图中获得的属性?在mvc4上查看属性

像System.Security.Principal的“用户”。 我可以开始考虑写代码如下:

@if(User.Identity) ... bla bla bla 

我有一个类:

public class UserModel 
{ 
    public int UserId { get; set; } 
    public int CustomerId { get; set; } 
    public string UserName { get; set; } 
} 

现在我有一个名为“的UserInfo”所有控制器继承BaseController类的属性。 代码:

public UserModel UserInfo 
{ 
    get { 
     if (_userInfo == null) 
     { 
      ...fill user info 
     } 
     return _userInfo; 
    } 
} 

我不想把它作为了@model,但仍然有可能使用它的观点 @UserInfo我该怎么办呢?

+0

你可以使用ViewBag,但有你不希望将其添加到模型中的原因是什么? – cadrell0 2013-03-05 17:31:09

+0

1.我有很多意见,不想添加每个模型 2.我不喜欢ViewBag因为它是动态的。有没有一种方法来实现它,就像你对“用户”属性的视图一样? – 2013-03-05 17:37:52

回答

0

您可以将UserModel添加到基本视图模型,但缺点是如果您在布局视图中使用它,则所有视图模型都必须继承此类。我认为在这种情况下,ViewBag的灵活性值得称赞。

浏览:

@{ 
    var UserInfo = ViewBag.UserInfo as UserModel; 
} 

BaseController:

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    ViewBag.UserInfo = GetUserInfo(); // however you decide to populate this 
} 
+0

我希望能够在我的视图上编写@UserInfo。 – 2013-03-05 18:46:25

+0

使用该声明@ {var UserInfo ...},您将拥有@UserInfo和intellisense。 – Jasen 2013-03-05 18:56:54