我想在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