2015-04-19 94 views
0

我從控制器傳遞對象的佈局是這樣的:在MVC中傳遞對象佈局5

public ActionResult MyProfile() 
{ 
    var roles = new List<int?>(); 
    User.Roles.ForEach(r => roles.Add(r.ID)); 
    return View(new ProfileModel() 
    { 
    LoginUser = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(string.IsNullOrEmpty(User.LastName) ? string.Empty : User.LastName.ToLower()), 
    UserRole = new List<int?>(roles) 
    }); 
} 

public class ModelBase { 

    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public string LoginUser { get; set; } 

    public List<int?> UserRole { get; set; } 

    public ModelBase() { 
     UserRole = new List<int?>(); 
    } 
} 

public class ProfileModel : ModelBase { } 

這工作,但我必須返回一個視圖,因爲當我所有的控制器動作做到這一點我需要所有視圖中的角色和登錄用戶。

有沒有辦法讓我這樣做一次,而不必在我的行爲中重複?

我嘗試將它添加到基本控制器,但ROLES和LOGINUSER始終爲空。

我知道這已經在SO上解決了很多,但他們都在做某件事。

謝謝。

+0

你是說你想渲染用戶的細節和他們在每個視圖中的角色? –

+0

是的,角色是用於填充導航。 – capiono

+3

更好的方法是使用'[ChildActionOnly]'方法返回導航html的局部視圖,然後在佈局中使用'@ Html.Action()'調用該方法並渲染局部視圖你的佈局。 –

回答

3

使用斯蒂芬·馬克建議我這樣做:

[ChildActionOnly] 
    public PartialViewResult Navigation() { 
     return PartialView("_Navigation", new LayoutModel(User)); 
    } 

    [ChildActionOnly] 
    public PartialViewResult LoginInfo() { 
     return PartialView("_LoginInfo", new LoginInfoModel(User)); 
    } 

而且

<div class="collapse navbar-collapse" id="navbar-collapse-area"> 
     @Html.Action("LoginInfo", "Home") 
</div> 

<div class="col-lg-2 sidebox"> 
     <div class="sidebar content-box" style="display: block;"> 
      @Html.Action("Navigation", "Home") 
     </div> 
</div> 

伯納德的建議也適用,但我更喜歡這個。

1

試試這個:

public ActionResult MyProfile() 
{ 
    var roles = new List<int?>(); 
    User.Roles.ForEach(r => roles.Add(r.ID)); 
    return View(new ProfileModel(User)); 
} 

型號:

public class ModelBase 
{ 
    public ModelBase(User user) { 
     UserRole = new List<int?>(); 
     LoginUser = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(string.IsNullOrEmpty(user.LastName) ? string.Empty : user.LastName.ToLower()), 
    } 

    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public string LoginUser { get; set; } 

    public List<int?> UserRole { get; set; } 
} 

ProfileModel:

public class ProfileModel : ModelBase 
{ 
    public ProfileModel(User user) : base(user) { } 
} 
0

我認爲這不是一個不好的做法編寫一些代碼在你的佈局。如果它是一個剃鬚刀視圖或類似的東西,你可以直接在視圖中添加用戶名和它的角色。