asp.net mvc 花样传值

来源:互联网 发布:计算机处理数据的过程 编辑:程序博客网 时间:2024/04/29 01:10

[原创] asp.net mvc 花样传值(二)

发表时间:2011/4/17 17:44 | 点击:93 | 作者: | 来自:mvcapp | 标签:

asp.net mvc中的传值有很多种方法,比如用ViewData、ViewBag等若类型传值,还有继承自一个IEnumerable泛型接口的强类型传值,或一个自定义的实体类viewModel的方式传值,今天我们来介绍如何从数据表中取得数据,并用ViewData、ViewBag传递到View页面。

1.新建一个asp.net mvc应用程序,命名为MvcApp

2.新建一个数据库,并命名为MvcAppTest

3.建立一个表demo。表的定义如下图

4.在VS中新建一个LINQ to SQL类 并命名为Linq,把刚刚的MvcAppTest表拖进去

4.修改HomeController的代码,如下:

 

view source
print?
01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Web;
05using System.Web.Mvc;
06using MvcApp.Models;
07  
08namespace MvcApp.Controllers
09{
10    public class HomeController : Controller
11    {
12        public ActionResult Index()
13        {
14            LinqDataContext ld = new LinqDataContext(); //实例化LInqData对象
15  
16            //查询user表中的数据并保存在ViewData中
17            ViewData["model"] = from i in ld.user
18                        orderby i.datetime descending
19                        select i;
20  
21            return View(); 
22        }
23  
24        public ActionResult About()
25        {
26            return View();
27        }
28    }
29}

 

4.修改对应的View页面代码,如下:

 

view source
print?
01@{
02    ViewBag.Title = "Home Page";
03}
04@foreach (var item in ViewData["model"] as IEnumerable<MvcApp.Models.user>)
05{
06  
07    <ul>
08        <li>@item.name</li>
09        <li>@item.sex</li>
10        <li>@item.datetime.ToString()</li>
11    </ul>
12}

注意,在遍历ViewData["model"]的时候,要让其实现IEnumerable的接口。

在表中添加两条示例数据后运行如图:


 

 

下面来介绍另一直比较dynamic的ViewBig。

 

HomeController:

 

view source
print?
01public ActionResult Index()
02        {
03            LinqDataContext ld = new LinqDataContext(); //实例化LInqData对象
04  
05            //查询user表中的数据并保存在ViewBag中
06            ViewBag.model = from i in ld.user
07                            orderby i.datetime descending
08                            select i;
09  
10            return View();
11        }
View:

 

 

view source
print?
01@{
02    ViewBag.Title = "Home Page";
03}
04@foreach (var item in ViewBag.model)
05{
06  
07    <ul>
08        <li>@item.name</li>
09        <li>@item.sex</li>
10        <li>@item.datetime.ToString()</li>
11    </ul>
12}
是不是发现区别了呢?

 

 

小编Ps:ViewBag虽然比较简单, 但是由于ViewBag的动态特效,也导致它在VS中暂时不会有代码提示的功能。

其实还有一种传值TempData, 它和ViewData、ViewBag的区别是它可以在不同在页面中传值,并且只能实用一次,可以把它形容成一次性Session。用法和ViewData类,这里不在阐述。

下节我们来讲强类型传值,还请继续关注。