前奏
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从控制器传递数据到视图的四种方式。