Asp.net mvc 如何在MVC中创建通用视图模型?

Asp.net mvc 如何在MVC中创建通用视图模型?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我想在MVC中使用viewmodel,而不是使用viewbag。是否有一种方法可以创建一些在所有控制器之间共享的通用viewmodel,然后在视图中使用它?我需要什么样的代码?我想在一个基本控制器中创建一些东西。这可能吗?我认为在控制器和视图之间传递数据的主要方法是创建一个表示要传递给视图的数据的类,并将该模型变量传递给视图方法 /Models/Home/IndexViewModel.cs namespace MyProject.Models.Home { public class Inde

我想在MVC中使用viewmodel,而不是使用viewbag。是否有一种方法可以创建一些在所有控制器之间共享的通用viewmodel,然后在视图中使用它?我需要什么样的代码?我想在一个基本控制器中创建一些东西。这可能吗?

我认为在控制器和视图之间传递数据的主要方法是创建一个表示要传递给视图的数据的类,并将该模型变量传递给视图方法

/Models/Home/IndexViewModel.cs

namespace MyProject.Models.Home
{
  public class IndexViewModel
  {
    public string Message { get; set; }
  }
}
public class HomeController
{
  public ActionResult Index()
  {
    IndexViewModel model = new IndexViewModel();
    model.Message = "Hello World!";
    View(model);
  }
}
namespace MyProject.Models
{
  public class SharedData
  {
    public DateTime Birthday { get; set; }
  }
}
namespace MyProject.Models
{
  public interface ISharedDataViewModel
  {
    public SharedData Data { get; set; }
  }
}
控制器/HomeController.cs

namespace MyProject.Models.Home
{
  public class IndexViewModel
  {
    public string Message { get; set; }
  }
}
public class HomeController
{
  public ActionResult Index()
  {
    IndexViewModel model = new IndexViewModel();
    model.Message = "Hello World!";
    View(model);
  }
}
namespace MyProject.Models
{
  public class SharedData
  {
    public DateTime Birthday { get; set; }
  }
}
namespace MyProject.Models
{
  public interface ISharedDataViewModel
  {
    public SharedData Data { get; set; }
  }
}
/Views/Home/Index.cshtml(在MVC3中)

为需要SharedData类的模型创建接口

/Models/isharedataviewmodel.cs

namespace MyProject.Models.Home
{
  public class IndexViewModel
  {
    public string Message { get; set; }
  }
}
public class HomeController
{
  public ActionResult Index()
  {
    IndexViewModel model = new IndexViewModel();
    model.Message = "Hello World!";
    View(model);
  }
}
namespace MyProject.Models
{
  public class SharedData
  {
    public DateTime Birthday { get; set; }
  }
}
namespace MyProject.Models
{
  public interface ISharedDataViewModel
  {
    public SharedData Data { get; set; }
  }
}
更新Home 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.isharedataviewmodel//强类型局部视图
@if(model!=null&&model.Data!=null)
{
@model.Data.Birthday.ToString()
}
更新主索引页以调用局部视图

/Views/Home/Index.cshtml(在MVC3中)

@Model MyProject.Models.Home.IndexViewModel//强类型视图
@模型消息
@Html.Partial(“SharedDataView”,模型)

现在,如果页面模型实现了
isharedataviewmodel

^那么任何页面都可以调用局部视图,这是迄今为止最好的解释和实现。