如何在 MVC 中创建通用视图模型?

2023-12-02

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


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

/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模型。然而,这变得非常不灵活,所以我会采取以下措施来保持设计的灵活性。我假设您想要将一些数据传递给许多视图(部分或全部)。

创建表示要传递到多个视图的数据的类:

/模型/SharedData.cs

namespace MyProject.Models
{
  public class SharedData
  {
    public DateTime Birthday { get; set; }
  }
}

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

/模型/ISharedDataViewModel.cs

namespace MyProject.Models
{
  public interface ISharedDataViewModel
  {
    public SharedData Data { get; set; }
  }
}

更新 Home IndexViewModel 以使用接口和共享数据

/Models/Home/IndexViewModel.cshtml

namespace MyProject.Models.Home
{
  public class IndexViewModel: ISharedDataViweModel
  {
    public string Message { get; set; }
    public ShardedData Data { get; set; }
  }
}

创建一个知道如何显示共享数据的部分视图

/视图/共享/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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 MVC 中创建通用视图模型? 的相关文章

随机推荐

  • 为什么在调用 jnz 之前要将一个值与其自身进行“或”操作?

    我正在阅读一些执行以下操作的代码 OR al al JNZ loc 123456 如果我没读错的话 OR命令只是设置一个标志位 然后测试该寄存器是否有任何非零值 为什么要这样写而不是这样写 CMP al 0 JNE loc 123456 哪
  • 在 WooCommerce 中显示产品类别的随机产品缩略图

    我正在尝试提取随机产品缩略图以在我的页面之一上显示为图像 我似乎找不到有效的方法 并尝试了以下解决方案this and this post 在 div 中回显它也是有益的 这是我目前正在尝试的 但我仍然不确定如何做到这一点 函数 php f
  • 使用 C# 从 xml 文件获取值

    我对 xml 很陌生 我不知道如何从下面的 xml 文件中读取 获取值
  • 无法从 Android 设备在 Facebook 页面中看到类似选项

    I am trying to open a facebook page from my app in both android and ios In ios the page shows LIKE button but in android
  • 使用参数化 SqlCommand 是否可以使我的程序免受 SQL 注入的影响?

    我知道SQL注入是相当危险的 现在 在我的 C 代码中 我使用以下命令编写参数化查询SqlCommand class SqlCommand command command CommandText SELECT FROM Jobs WHERE
  • Android 列表视图的 Bubble Chat 问题

    嗨 我遇到了一个奇怪的麻烦 我没有得到气泡 例如你的消息在右边 我的消息在左边 当我调用notifydatachanges时 它会删除所有的气泡 请指导我 下面是代码 private final Handler mHandler new H
  • 如何使用 ASP.Net MVC 路由来路由图像?

    我将网站升级为使用传统 ASP Net Web 表单中的 ASP Net MVC 我使用 MVC 路由将对旧 aspx 页面的请求重定向到新的控制器 操作等效项 routes MapRoute OldPage oldpage aspx ne
  • SwiftUI:访问 macOS 上的特定场景 ViewModel

    在这个简单的示例应用程序中 我有以下要求 有多个窗口 每个窗口都有自己的ViewModel 切换Toggle在一个窗口中应该not更新另一个窗口的 我还希望能够通过菜单切换 就目前而言 前两点是not鉴于 最后一点是有效的 我已经知道当我移
  • django heroku 媒体文件 404 错误

    我最近在 Heroku 上部署了一个 Django 应用程序 并上传了一些媒体文件 一切似乎都工作正常 直到昨天 当我尝试再次访问该应用程序时 发现它给出了 404 错误 有什么想法为什么会发生这种情况吗 设置 py import os B
  • ASP.Net 2012 使用 jQuery 进行非侵入式验证

    我正在使用 Visual Studio 2012 我创建了一个空 ASP Net Web 应用程序 当我尝试添加传统验证器控件到新页面 出现这个错误 WebForms UnobtrusiveValidationMode 需要 jquery
  • oracle sql在计数时不是按表达式分组[重复]

    这个问题在这里已经有答案了 我正在尝试运行以下查询来计算过去 6 个月内转诊患者的医生数量 SELECT count local doc providerno NumberofReferals LOCAL DOC FULLNAME FULL
  • Javascript 世界时区与 GMT 的时差计算器

    我希望有人能告诉我定期更新时区数据库的方向 我找到了一个 但抱歉我不记得它来自哪里 但是随着当前 GMT 时钟变化的快速临近 我担心我的所有数据都会不正确 即从英国到纽约的时差将从落后 5 小时变为 6 小时落后几个小时 任何有关此事的帮助
  • 包含相当于 SQL Server 中的 Like

    当我运行此查询时 Select from Table1 Where Column1 Like aaa 3 Result Select from Table1 Where Column1 Like a 3 Result Select from
  • PowerShell 的 ConvertFrom-SecureString -key 的安全性如何

    我有一个模块 其中包含一些带有一些私有数据的字符串 这些数据应该很难获得 但会经常更改 我需要将此脚本放在各种机器上 这些机器可能会访问它 并且代码可能会被不应该拥有用于导出输出的信息的人读取 我真的很担心不时变化的字符串 因此我正在考虑创
  • PyOpenGL 如何导入 obj 文件?

    import pygame import OpenGL from pygame locals import from OpenGL GL import from OpenGL GLU import import pywavefront sc
  • javascript highchart 照片幻灯片

    我正在使用 javascript 库 highchart 创建可视化图表 我用一些虚假数据创建了图表 我想知道如何使用图表数据触发图像幻灯片 因此 如果我将鼠标悬停在图表中某个点的数据上 相应的图像将水平滑动到页面中心 这是到目前为止我的一
  • 如何计算负数的平方根?

    我正在尝试使用以下代码从负数的平方根创建复数 include Math z Complex sqrt 9 但它会产生这个错误 Math DomainError Numerical argument is out of domain sqrt
  • 在 NetworkX 中重现相同的图

    我想改进我的图表 存在以下问题 如何创建一致的图 图本身并不一致 每次我执行 运行代码时 它都会生成不同的图像 不一致的图表显示在 url 中 如何自定义整个图表 图片的大小并使其更大 如何为对象 a 设置永久位置 以便它始终出现在第一个
  • 为登录 Facebook 的 Android 应用程序编写测试

    我的 Android 应用程序使用FacebookSDK用于登录 这是第一个屏幕 除非登录 否则您无法执行任何操作 我想写一些Espresso在 Greenhouse 持续集成服务器上运行的测试 我搜索了一下 发现 iOS 上有 FBSDK
  • 如何在 MVC 中创建通用视图模型?

    我想在 MVC 中使用视图模型而不是使用 viewbag 有没有一种方法可以创建一些在所有控制器之间共享的通用视图模型 然后在我的视图中使用它 为此我需要什么样的代码 我想也许在基本控制器中创建一些东西 那可能吗 我相信在控制器和视图之间传