我正在从控制器向对象传递对象,如下所示:
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 { }
这样可行但是,我必须在返回视图时为我的所有Controller Action执行此操作,因为我需要所有视图上的角色和登录用户。
有没有办法让我这样做一次,而不必在我的行动中重复它?
我尝试将其添加到基本控制器,但ROLES和LOGINUSER始终为null。
我知道在SO上已经解决了很多问题,但他们都在做些什么。
感谢。
答案 0 :(得分:3)
使用Stephen Muecke的建议我这样做了:
[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 :(得分: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) { }
}
答案 2 :(得分:0)
我认为在你的布局中编写一些代码并不是一个坏习惯。如果它是剃刀视图或类似的东西,您可以直接在视图中添加用户名及其角色。