ASP.NET MVC从控制器传递数据到视图的四种方式详解

发布时间 - 2026-01-10 22:29:22    点击率:

前奏

1. 在新建项目中的Models文件下,新建Products类:

 public class Products
  {
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
  }

2. 在控制器中实例化此类

var p = new Products()
      {
        Id = 1,
        Name = "饮料",
        Price = 2.5
      };

方式1:ViewData

将控制器中的方法用ViewData以键值对的形式类存储上述的实例化对象,如下:

ViewData["person"] = p;

然后在视图中获取ViewData中的值,并转换对象,如下:

@{
  var p = (Products)ViewData["person"];
}
<h1>@p.Id</h1>
<h2>@p.Name</h2>
<h3>@p.Price</h3>

方式2:ViewBag

将控制器中的方法利用ViewBag动态表达式的形式存储上述对象,如下:

ViewBag._Product = p;

 修改视图,如下:

@{
  var p = (Products)ViewBag._Product;
}

 方式3:Model

将控制器中的方法返回View上述对象,如下:

public ActionResult Index()

    {

      var p = new Products()

      {

        Id = 1,

        Name = "饮料",

        Price = 2.5

      };

      return View(p);

    } 

而我们在视图中得到强制类型对象Products,如下:

@using MvcTest.Models;
@model Products
@{
  ViewBag.Title = "Index";
}
<h1>@Model.Id</h1>
<h2>@Model.Name</h2>
<h3>@Model.Price</h3>

方式四:TempData

TempData可以通过转向继续使用,因为它的值保存在Session中。但TempData只能经过一次传递,之后会被系统自动清除。

下面我将演示从Index动作转向Order动作,并在视图中输出TempData中存储的值。

首先在控制中新建Action方法,命名为Order方法,代码如下:

public ActionResult Index()
    {
      var p = new Products()
      {
        Id = 1,
        Name = "饮料",
        Price = 2.5
      };
      TempData["_product"] = p;
      return RedirectToAction("Order");
    }
    public ActionResult Order()
    {
      return View();
    }

 修改视图如下:

@{
  Products p = (Products)TempData["_product"];
}

假设控制器中的代码修改如下:

public ActionResult Index()
    {
      var p = new Products()
      {
        Id = 1,
        Name = "饮料",
        Price = 2.5
      };
      TempData["_product"] = p;
      return RedirectToAction("Order");
    }
    public ActionResult Order()
    {
      return RedirectToAction("Detail");
    }
    public ActionResult Detail()
    {
      Products _product = (Products)TempData["_product"];
      return View("");
    }

转向:Index — Order — Detail,那么在Detail方法中,是不能获取到TempData对象的,因为TempData只能经过一次传递,之后会被系统自动清除。

输出结果

源码下载:http://xiazai./201701/yuanma/MvcTest_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# mvc控制器跳转视图  # mvc  # 视图与控制器传值  # 控制器传值到视图  # ASP.NET Core MVC中的视图(Views)  # ASP.NET Core MVC学习之视图组件(View Component)  # ASP.NET Core MVC基础学习之局部视图(Partial Views)  # ASP.NET MVC中分部视图的应用方法  # 详解使用asp.net mvc部分视图渲染html  # ASP.NET MVC从视图传参到控制器的几种形式  # asp.net core mvc权限控制:在视图中控制操作权限  # asp.net MVC 根据菜单树类别不同动态加载视图的实现步骤  # 器中  # 后会  # 并在  # 可以通过  # 此类  # 我将  # 命名为  # 大家多多  # 键值  # 源码下载  # 新建项目  # Price  # js  # person  # lt  # ViewData  # var  # strong  # class  # brush 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理CORS跨域请求?(配置示例)  如何快速登录WAP自助建站平台?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  中山网站制作网页,中山新生登记系统登记流程?  网易LOFTER官网链接 老福特网页版登录地址  如何在阿里云通过域名搭建网站?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  网站图片在线制作软件,怎么在图片上做链接?  大连 网站制作,大连天途有线官网?  Python3.6正式版新特性预览  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  网站制作报价单模板图片,小松挖机官方网站报价?  微信小程序 HTTPS报错整理常见问题及解决方案  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel如何生成URL和重定向?(路由助手函数)  如何做网站制作流程,*游戏网站怎么搭建?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  *服务器网站为何频现安全漏洞?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  黑客如何利用漏洞与弱口令入侵网站服务器?  Android okhttputils现在进度显示实例代码  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel如何使用Collections进行数据处理?(实用方法示例)  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  如何在Windows服务器上快速搭建网站?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  SQL查询语句优化的实用方法总结  简单实现Android验证码  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何在阿里云购买域名并搭建网站?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Laravel怎么在Controller之外的地方验证数据  如何快速搭建自助建站会员专属系统?