欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-04 20:34:48
前奏 1. 在新建项目中的models文件下,新建products类: public class products { public int...

前奏

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只能经过一次传递,之后会被系统自动清除。

输出结果

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

源码下载:http://xiazai.jb51.net/201701/yuanma/mvctest_jb51.rar

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