加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 00:14:48 所属栏目:asp.Net 来源:网络整理
导读:我想在MVC中使用viewmodel而不是使用viewbag.有没有办法可以创建一个在我的所有控制器之间共享的通用视图模型,然后在我的视图中使用它?我需要什么样的代码?我在考虑在基本控制器中创建一些东西.那可能吗? 解决方法 我相信在控制器和视图之间传递数据的主
我想在MVC中使用viewmodel而不是使用viewbag.有没有办法可以创建一个在我的所有控制器之间共享的通用视图模型,然后在我的视图中使用它?我需要什么样的代码?我在考虑在基本控制器中创建一些东西.那可能吗?

解决方法

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

/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(在Razor 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; }
  }
}

更新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(在Razor 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(在Razor MVC3中)

@Model MyProject.Models.Home.IndexViewModel //strongly-typed view

<h1>@model.Message</h1>

@Html.Partial("SharedDataView",model)

现在,如果页面模型实现了ISharedDataViewModel,那么任何页面都可以调用局部视图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读