我有一個母版頁,需要顯示我的數據庫中的一些數據。作爲一個例子,我在頁面中有一個標題,它將顯示用戶擁有的消息/警報的數量。每個控制器都需要將這些數據傳遞給View。在MVC應用程序中執行此操作的最佳方法是什麼?我顯然不想在每個控制器操作中複製代碼。MVC主頁動態數據
1
A
回答
2
Darin的答案替代方案是ActionFilterAttribute
,它將數據壓入每個Action的ViewData。放置屬性的位置定義了哪些操作可以實現此目的。將它放在根控制器類上意味着所有操作都會得到它。
3
您可以使用子操作。 Phil Haack在這個blog post中做了很好的解釋。通過這種方式,您將擁有一個特定的控制器,用於從存儲庫中獲取數據並將其傳遞到其自己的部分視圖。然後在您的主頁面中,您只需包含以下操作:
<%= Html.Action("index", "somecontroller") %>
這樣其他控制器不需要將數據傳遞到視圖。它有一個完全獨立的生命週期。
2
你可以有所有機型繼承模型:
public abstract class MasterModel
{
public int NumberOfMessages { get; set; }
public string Username { get; set; }
}
然後,你可能有某種模型廠將創建被請求的模型:
public class ModelFactory : IModelFactory
{
private IUserRepository userRepository;
public ModelFactory(IUserRepository userRepository)
{
// Inject a repository .. or a service...
this.userRepository = userRepository;
}
public T Create<T>() where T : MasterModel, new()
{
var m = new T()
{
NumberOfMessages = this.userRepository.GetNumberMessages(currentUser) // Get current user somehow... HttpContext
};
return m;
}
}
,那麼你」 d將IModelFactory注入控制器,然後在動作中使用它:
[HttpGet]
public ViewResult DoSomething()
{
var model = this.modelFactory.Create<MyActionModel>();
return View(model);
}
Th您的主人有MasterModel
模型類型,然後可以使用此信息。這樣,所有的邏輯都可以保存在注入工廠的服務/存儲庫中,從而創建每個視圖的模型。這就是我所做的事情,它的成效非常好。
相關問題
- 1. ASP.NET MVC主頁數據
- 2. 動態主頁面聲明 - ASP.NET MVC
- 3. ASP.NET,MVC和動態數據
- 4. 從MVC應用程序的數據庫動態加載主頁面
- 5. 傳遞數據到主頁在ASP.NET MVC
- 6. ASP.Net動態切換主頁
- 7. MVC 5,從數據庫創建動態頁面/視圖
- 8. jQuery的數據表服務器端分頁mvc動態列
- 9. ASP.NET MVC:在主頁面中動態鏈接到CSS樣式表
- 10. asp.net mvc動態數據文章
- 11. MVC如何創建動態數據表?
- 12. ASP .NET MVC 2:動態主題
- 13. ASP.NET MVC主頁面
- 14. JQuery,MVC和主頁
- 15. 如何動態刮取頁面數據?
- 16. jQuery的數據表動態分頁
- 17. Drupal在動態頁面插入數據
- 18. 動態網頁中的http數據包
- 19. 動態元數據和頁面描述
- 20. 動態啓用數據表分頁
- 21. 提供動態數據到網頁
- 22. jquery Ajax分頁Next/Prev - 動態數據
- 23. WordPress的靜態主頁動態帖子頁面URL重寫
- 24. Asp.net Mvc:動態頁面標題
- 25. 動態頁面標題Thymeleaf Spring MVC
- 26. 彈簧mvc:動態404頁面
- 27. 在asp.net中創建動態頁面mvc
- 28. asp.net mvc動態更改母版頁&.css
- 29. 帶動態模板的主頁
- 30. 在主頁面中動態加載PHP
我想我會嘗試這種方法反對嘗試兒童行動。我不喜歡模型工廠解決方案,因爲我不認爲每個模型都必須從基礎模型類繼承。 – Dismissile 2010-12-15 16:43:33