控制器向视图传递数据的3种方式

仅供自己学习用:



在ASP.NET MVC中,控制器和视图之间的数据传递包括两个方向:

  1. 将控制器设置的数据传递到视图中,在视图中显示数据;
  2. 将视图中的数据传递到控制器 中,在控制器中读取、处理数据。

今天先给大家讲讲控制器向视图传递数据:
控制器向视图传递数据ASP.NET框架中可以通过3种方式将数据从控制器传递到视图。
1. 使用 ViewData 传递数据在ASP.NET MVC框架中,所有的控制器必须继承Controller类,该类是ControllerBase的之类。根据ControllerBase类中的ViewData属性, 可以在控制器的相关动作方法中设置视图数据字典的值(ViewDataDictionary)
例如,在"Home" 控制器的Index()动作方法中,设置ViewData视图数据字典。namespace MvcApplication1:Controllers{     public class HomeController:Controller
    {
        public ActionResult  Index()
        {            ViewData["Name"]="代码里";
            ViewData["Ads"]="www.daimali.com";
            ViewData["person"]=new Person{name="李四",sex="男"};
            return View();
        }    }
}示例中ViewData字典中保存了2个字符串和一个Person对象。在ViewData中保存数据时都会转换为Object,因此视图中显示ViewData数据时,一般需要进行数据的类型转换。     站点名称:@(ViewData["Name"])
    网站地址:@(ViewData["Ads"])
    @{        Person person=ViewData["person"] as Person;    }        所属人:@(person.name)     性别:  @(person.sex)

2. 使用TempData传递数据    根据ControllerBase类中的TempData属性,同样可以在控制器的相关动作方法中设置该TempData属性的值。

例如,在"Home" 控制器的Index()动作方法中,设置TempData视图数据字典。namespace MvcApplication1:Controllers{     public class HomeController:Controller
    {
        public ActionResult  Index()
        {            TempData["Name"]="代码里";
            TempData["Ads"]="www.daimali.com";
            TempData["person"]=new Person{name="李四",sex="男"};
            return View();
        }    }
}视图中读取数据:    站点名称:@(TempData["Name"])
    网站地址:@(TempData["Ads"])
    @{        Person person=TempData["person"] as Person;    }        所属人:@(person.name)     性别:  @(person.sex)

通过上述ViewData和TempData的举例,大家可以看到,用法上完全一样,只是字面上看起来不一样而已,但是他们又是完全不同的两种数据类型。
我们来比较一下ViewData和TempData的区别:
  1. ViewData的数据类型是ViewDataDictionary类的实例化对象,而TempData的数据类型则是TempDataDictionary类的实例化对象;
  2. ViewData 只在当前页面访问,无法跨页传递;TempData则保存在Session中,可以实现跨页传递,且传递一次之后自动删除。

不同点:  1. 类型不同  2. 访问范围不同,ViewData当前页,TempData跨页  3. 使用次数不同,TempData只能访问一次  4. 存储位置不同,TempData存储在Session中。
3. 使用Model传递数据  通过在控制器的View()方法中传递实例化对象,可以将该对象传递到视图中。
HomeController控制器代码:namespace MvcApplication1:Controllers{     public class HomeController:Controller
    {
        public ActionResult  Index()
        {            Person person=new Person{name="李四",sex="男"};
            return View(person);//传递对象
        }    }
}视图中使用: @model Person    站点名称:@(TempData["Name"])
    网站地址:@(TempData["Ads"])
    @{        Person person=TempData["person"] as Person;    }        所属人:@( Model.name)     性别:  @( Model.sex)

如上,传递实例化对象时,控制器将ViewDataDictionary类的实例化对象的Model属性设置为需要被传递的对象;在视图 中只要读取Model属性,就可以获得控制器中的实例化对象。
总结:从控制器向视图传递数据可以使用 ViewData,TempTata和Model 3种方式。下次将会给大家分享视图向控制器提交数据的几种方式。

你可能感兴趣的:(控制器向视图传递数据的3种方式)