這可能是一個愚蠢的問題,但我想弄清楚如何爲顯示登錄用戶DisplayName的分部視圖填充ViewModel。此部分視圖位於主佈局中,因此它將位於每個頁面上。聽起來很簡單,我知道;但是對於我的生活,我無法弄清楚將數據傳送到視圖的最佳方式。我如何堅持這一觀點?如何填充部分視圖以在每個頁面上顯示
回答
最好的方法可能會使用兒童動作以及Html.Action helper。
,以便始終在ASP.NET MVC你開始一個視圖模型,將代表你願意來操作視圖/顯示的信息:
public class UserViewModel
{
public string FullName { get; set; }
}
然後控制器:
public class UsersController: Controller
{
// TODO: usual constructor injection here for
// a repository, etc, ..., omitted for simplicity
public ActionResult Index()
{
var name = string.Empty;
if (User.Identity.IsAuthenticated)
{
name = _repository.GetFullName(User.Identity.Name);
}
var model = new UserViewModel
{
FullName = name
};
return PartialView(model);
}
}
相應的局部視圖:
@model UserViewModel
{
// Just to make sure that someone doesn't modify
// the controller code and returns a View instead of
// a PartialView in the action because in this case
// a StackOverflowException will be thrown (if the child action
// is part of the layout)
Layout = null;
}
<div>Hello @Model.FullName</div>
然後繼續在你的_layout,包括這個動作:
@Html.Action("Index", "Users")
顯然下次改進這個代碼是避免打在每個請求的數據庫,但某處存儲這些信息,一旦用戶登錄,因爲它會出現在所有頁面上。優秀的地方是例如加密認證cookie的用戶數據部分(當然,如果你使用FormsAuthentication),Session,...
所以部分視圖的名稱必須與ActionResult的名稱相同? – CrazyCoderz 2011-05-16 18:44:57
@助理助理,是的,通常的ASP.NET MVC約定。它應該位於'〜/ Views/Users/Index.cshtml'文件夾中。 'Users',因爲那是我在我的例子和'Index'中使用的控制器的名稱,因爲這是我在示例中使用的動作的名稱。 – 2011-05-16 18:46:02
我明白了。我使用的建議命名爲部分視圖,以_開頭,例如_LoggedInUserPartial.cshtml,它位於視圖/共享文件夾中。 – CrazyCoderz 2011-05-16 18:53:29
你可以看看有一個孩子的行動方法。
- 1. 填充部分視圖
- 2. Ajax.BeginForm在Chrome/FF中正確顯示部分視圖,但在IE的新頁面上顯示部分視圖
- 3. 填充頁面加載的部分視圖
- 4. Viewpager填充頁面的其餘部分
- 5. 在一個頁面上的幾個部分視圖(圖表)
- 6. 如何在類別頁面中顯示每個圖庫圖像
- 7. 填充體顯示登錄頁面
- 8. 在父頁面顯示錯誤的mvc部分視圖
- 9. 如何在每個頁面上顯示一個表單元素?
- 10. 在多個頁面上填充標籤
- 11. 如何在視圖頁面中填充下拉菜單?
- 12. 兩個navbar-inner在同一頁面上如何改變每個的填充?
- 13. 如何讓joomla部分只顯示在某些頁面上?
- 14. 在每個部分顯示不同視圖像recyctm
- 15. 我可以在剃刀局部視圖內的主頁面中填充ContentPlaceHolder嗎?
- 16. 如何將三個點顯示在您的視圖上的哪個頁面上?
- 17. 在每個頁面中分別顯示每個div內容
- 18. 如何用圖像填充頁面?
- 19. 如何在底部的每個屏幕中顯示視圖
- 20. 我如何顯示一個頁面上的GridView然後在同一頁上顯示一個列表視圖
- 21. 部分視圖和視圖將顯示在母版頁
- 22. 如何在每個頁面上顯示子報告的標題?
- 23. 如何在每個頁面上顯示會員詳細信息?
- 24. 如何在每個頁面上突出顯示菜單項dynamicaly?
- 25. 如何在打印的每個頁面上顯示徽標?
- 26. 如何添加將在每個頁面上顯示的信息
- 27. 如何在每個頁面上顯示消息欄
- 28. 如何使用分頁顯示每頁上的一個項目
- 29. 如何在由視圖創建的頁面上顯示塊?
- 30. 如何在magento分類視圖頁面的頂部顯示工具欄/分頁器代替麪包屑?
局部視圖是強類型的嗎? – 2011-05-16 17:18:33
是的,它有@model Web.ViewModels.LoggedInUserPartailViewModel – CrazyCoderz 2011-05-16 17:19:14
試圖找出何時何地使用viewModel獲取數據的部分 – CrazyCoderz 2011-05-16 17:19:54