您的位置:首页 > 其它

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

2017-02-05 09:45 281 查看
仅供自己学习用:

在ASP.NET MVC中,控制器和视图之间的数据传递包括两个方向:
将控制器设置的数据传递到视图中,在视图中显示数据;
将视图中的数据传递到控制器 中,在控制器中读取、处理数据。

今天先给大家讲讲控制器向视图传递数据:
控制器向视图传递数据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数据时,一般需要进行数据的类型转换。<html><head></head><body>    站点名称:@(ViewData["Name"])
    网站地址:@(ViewData["Ads"])

    @{        Person person=ViewData["person"] as Person;    }        所属人:@(person.name)     性别:  @(person.sex)
</body></html>
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();

        }    }

}视图中读取数据:<html><head></head><body>    站点名称:@(TempData["Name"])

    网站地址:@(TempData["Ads"])

    @{        Person person=TempData["person"] as Person;    }        所属人:@(person.name)     性别:  @(person.sex)

</body></html>

通过上述ViewData和TempData的举例,大家可以看到,用法上完全一样,只是字面上看起来不一样而已,但是他们又是完全不同的两种数据类型。

我们来比较一下ViewData和TempData的区别:
ViewData的数据类型是ViewDataDictionary类的实例化对象,而TempData的数据类型则是TempDataDictionary类的实例化对象;
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<html><head></head><body>    站点名称:@(TempData["Name"])

    网站地址:@(TempData["Ads"])

    @{        Person person=TempData["person"] as Person;    }        所属人:@(Model.name)     性别:  @(Model.sex)

</body></html>

如上,传递实例化对象时,控制器将ViewDataDictionary类的实例化对象的Model属性设置为需要被传递的对象;在视图 中只要读取Model属性,就可以获得控制器中的实例化对象。
总结:从控制器向视图传递数据可以使用ViewData,TempTata和Model 3种方式。下次将会给大家分享视图向控制器提交数据的几种方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: