当前位置: 首页 > article >正文

Asp.NET Core Mvc中一个视图怎么设置多个强数据类型

在ASP.NET Core MVC中,一个视图通常与一个强类型模型(Model)相关联。然而,在某些情况下,你可能需要在单个视图中使用多个不同的模型类型。为了实现这一点,你有几种选择:

  1. 使用视图模型(ViewModel)
    创建一个包含所有需要属性的新的视图模型类。这是最常见和推荐的方法,因为它保持了视图的单一职责原则,并且使得视图代码更加清晰和易于维护。

    例如,假设你有两个模型 UserOrder,你可以创建一个视图模型 UserOrderViewModel

    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    public class Order
    {
        public int Id { get; set; }
        public decimal Total { get; set; }
    }
    
    public class UserOrderViewModel
    {
        public User User { get; set; }
        public Order Order { get; set; }
    }
    

    然后在你的控制器中,创建并传递这个视图模型到视图:

    public IActionResult SomeAction()
    {
        var user = new User { Id = 1, Name = "John Doe" };
        var order = new Order { Id = 101, Total = 99.99M };
    
        var model = new UserOrderViewModel { User = user, Order = order };
    
        return View(model);
    }
    

    在视图中,你可以这样使用:

    @model YourNamespace.Models.UserOrderViewModel
    
    <div>
        <h2>User Information</h2>
        <p>Name: @Model.User.Name</p>
    </div>
    
    <div>
        <h2>Order Information</h2>
        <p>Total: @Model.Order.Total</p>
    </div>
    
  2. 使用 ViewDataViewBag
    ViewDataViewBag 是动态对象,可以在控制器中设置值,然后在视图中读取。虽然这种方法更简单,但它牺牲了类型安全和代码的可读性。

    在控制器中:

    public IActionResult SomeAction()
    {
        var user = new User { Id = 1, Name = "John Doe" };
        var order = new Order { Id = 101, Total = 99.99M };
    
        ViewData["User"] = user;
        ViewData["Order"] = order;
    
        return View();
    }
    

    在视图中:

    @{
        var user = ViewData["User"] as User;
        var order = ViewData["Order"] as Order;
    }
    
    <div>
        <h2>User Information</h2>
        <p>Name: @user.Name</p>
    </div>
    
    <div>
        <h2>Order Information</h2>
        <p>Total: @order.Total</p>
    </div>
    
  3. 使用 Tuple
    虽然技术上可行,但这种方法不推荐,因为它牺牲了代码的可读性和维护性。

    在控制器中:

    public IActionResult SomeAction()
    {
        var user = new User { Id = 1, Name = "John Doe" };
        var order = new Order { Id = 101, Total = 99.99M };
    
        var model = Tuple.Create(user, order);
    
        return View(model);
    }
    

    在视图中:

    @model Tuple<YourNamespace.Models.User, YourNamespace.Models.Order>
    
    <div>
        <h2>User Information</h2>
        <p>Name: @Model.Item1.Name</p>
    </div>
    
    <div>
        <h2>Order Information</h2>
        <p>Total: @Model.Item2.Total</p>
    </div>
    

综上所述,推荐使用视图模型(ViewModel)方法,因为它提供了类型安全、清晰的代码结构和更好的可维护性。


http://www.kler.cn/a/394632.html

相关文章:

  • lua和C API库一些记录
  • Elasticsearch:使用 Ollama 和 Go 开发 RAG 应用程序
  • 基于python的扫雷游戏
  • 【CSS in Depth 2 精译_096】16.4:CSS 中的三维变换 + 16.5:本章小结
  • 【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理
  • Linux:线程的概念
  • PyQt入门指南五十二 版本控制与协作开发
  • Linux git-bash配置
  • 《深度学习》AlexNet网络
  • 11.14日志
  • vue中重置对象的好使方式(封装好的函数,可直接食用)
  • MATLAB中round函数用法
  • 用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)
  • 工程化实战内功修炼测试题
  • 深度学习笔记14-卷积神经网络2
  • C语言实现3D动态爱心图形的绘制与动画效果
  • 抖音小程序蓝海冷门玩法,前期搭建好后期自动变现模式解析!
  • 【IT人物系列】之Spring创始人
  • 计算机网络 (1)互联网的组成
  • AI赋能电商:提升销售效率与用户体验的新引擎
  • 飞腾平台Arm NN软件栈安装使用指南
  • 钉钉小程序 - - - - - overflow无效?
  • APEX高性能减速机MG/MGH系列 高负载应用下的精准动力传输
  • Linux sed 的多个用法
  • 微信小程序 — 农产品供销系统
  • 无人机应用场景:石油管道巡检技术详解