我想在MVC中使用viewmodel而不是使用viewbag。有沒有一種方法可以創建一些在我的所有控制器之間共享的通用視圖模型,然後在我的視圖中使用它?我需要什麼樣的代碼?我正在考慮在基本控制器中創建一些東西。那可能嗎?如何在MVC中創建通用視圖模型?
5
A
回答
7
我相信控制器和視圖之間傳遞數據的主要方法是創建一個類,它表示要傳遞給視圖的數據並將該模型變量傳遞給視圖方法。
/Models/Home/IndexViewModel.cs
namespace MyProject.Models.Home
{
public class IndexViewModel
{
public string Message { get; set; }
}
}
控制器/ HomeController.cs
public class HomeController
{
public ActionResult Index()
{
IndexViewModel model = new IndexViewModel();
model.Message = "Hello World!";
View(model);
}
}
/Views/Home/Index.cshtml(在剃刀MVC3)
@Model MyProject.Models.Home.IndexViewModel //strongly-typed view
<h1>@model.Message</h1>
讓我們來看一個簡單的例子,並根據您的具體要求進行構建。簡單的方法是讓每個視圖簡單地使用MyClass
模型。然而,這變得非常不靈活,所以這就是我將如何保持設計的靈活性。我將假設有一些數據要傳遞給許多視圖(部分或全部)。
創建類,它表示你想傳遞給多個視圖中的數據:
/Models/SharedData.cs
namespace MyProject.Models
{
public class SharedData
{
public DateTime Birthday { get; set; }
}
}
創建一個接口,用於模型需要SharedData類。
/Models/ISharedDataViewModel.cs
namespace MyProject.Models
{
public interface ISharedDataViewModel
{
public SharedData Data { get; set; }
}
}
更新主頁IndexViewModel使用接口和shareddata
/Models/Home/IndexViewModel.cshtml
namespace MyProject.Models.Home
{
public class IndexViewModel: ISharedDataViweModel
{
public string Message { get; set; }
public ShardedData Data { get; set; }
}
}
創建知道如何顯示共享數據的部分視圖
個/Views/Shared/SharedDataView.cs(剃刀中MVC3)
@Model MyProject.Models.ISharedDataViewModel //strongly-typed partial view
@if (model != null && model.Data != null)
{
<h3>@model.Data.Birthday.ToString()</h3>
}
更新首頁索引頁調用局部視圖
/Views/Home/Index.cshtml (在剃刀MVC3中)
@Model MyProject.Models.Home.IndexViewModel //strongly-typed view
<h1>@model.Message</h1>
@Html.Partial("SharedDataView", model)
現在任何頁面都可以調用局部視圖,如果頁面模型實現ISharedDataViewModel
。
相關問題
- 1. 通過模型在MVC視圖中創建到控制器
- 2. ASP.Net MVC創建視圖多模型
- 3. 如何用多個模型創建視圖mvc 4?
- 4. 各種視圖模型結構 - 如何創建視圖模型
- 5. 如何通過asp.net中的視圖創建/編輯模型mvc 5
- 6. 通用視圖模型控件(MVC)
- 7. 爲模型創建視圖
- 8. 在ASP.NET MVC中創建實體類型的視圖模型僅用於驗證?
- 9. MVC如何創建磚(?)在視圖
- 10. 在mvc中使用通用視圖模型
- 11. 如何在我的視圖模型中即時創建UI
- 12. 如何在Django admin中自動從模型創建視圖?
- 13. 如何在Django視圖中創建模型對象?
- 14. 如何在Loopback中創建數據視圖模型?
- 15. 如何在Odoo 10中創建沒有模型的視圖
- 16. 分配給模型的創建/新視圖需要mvc建議?
- 17. 如何爲模型創建基於類的創建視圖?
- 18. 使用兩個模型創建視圖
- 19. 創建子視圖模型使用MEF
- 20. 創建視圖模型,模型與一個在asp.net mvc的一對多關係
- 21. 如何在ASP.NET MVC中爲數據庫視圖建模MVC
- 22. 如何在視圖中創建多個模型?最好使用部分視圖和動態數量的模型
- 23. MVC 4:構建複合視圖模型
- 24. 如何在控制器/視圖mvc中使用多個模型?
- 25. ASP.NET MVC:如何在一個視圖中使用多個模型?
- 26. ASP.net MVC - 視圖如何訪問模型?
- 27. 如何在視圖中調用我在模型中創建的函數
- 28. MVC - 另一個模型視圖中的模型視圖
- 29. 模型在mvc aspx視圖中爲null
- 30. ASP.NET MVC在不同視圖中使用視圖模型
^很好的解釋和最好的實現。 – jhartzell 2012-02-24 03:30:54