ASP.NET MVC 控制器(Controller)传输数据到视图(View)

第一种方式 "ViewBag"——动态视图数据字典(多数情况下可以使用这种方式)

具体原理:

该属性位于ControllerBase抽象类中、定义如下:

 public dynamic ViewBag { get; }

属性类型:dynamic (运行时加载、错误使用程序将会报错)

注意事项:

1.只读类型:如果在控制器中直接将该值赋为NULL将会 有错误提示如图1所示

                           

                                                         图 1 动态视图数据字典是只读的

2.视图的WebViewPage类型下同样拥有一个ViewBag属性、且定义方式与控制器抽象类ControllerBase的定义方式一模一样。

   所以控制器能够将需要传递的数据绑定在ViewBag上传递给视图。

调用例子:

1.在控制器中定义了如下代码:

 public class ViewBagController : Controller
    {
        // GET: ViewBag
        public ActionResult Index()
        {
            ViewBag.Dramaname = "都挺好";
            ViewBag.performer = "苏大强";
            ViewBag.Releasetime = "2017";
            return View();
        }
    }

2.在视图上显示相关数据

@{
    ViewBag.Title = "测试控制器到视图数据的传递";
}
<h1>剧名:@ViewBag.Dramaname</h1>
<h2>主要人物:@ViewBag.performer </h2>
<h3> 上映时间:@ViewBag.Releasetime</h3>


3.显示效果如下:

第二种方式ViewData——该属性同样定义在ControllerBase抽象类中定义如下

public ViewDataDictionary ViewData { get; set; }

是一种字典类型的数据。注意该键值对中、值是Object类型的、所以在视图中使用控制器传递的数据需要进行类型转换。

public object this[string key] { get; set; }

1.在控制器中定义如下代码

  public class ViewBagController : Controller
    {
        // GET: ViewBag
        public ActionResult Index()
        {
            ViewData["Dramaname"] = "都挺好";
            ViewData["performer"] = "苏大强";
            ViewData["Releasetime"] = "2017";
            return View();
        }
    }

2.在对应的视图中接收数据


@{
    ViewBag.Title = "测试控制器到视图数据的传递";
}
<h1>ViewData剧名:@ViewData["Dramaname"]</h1>
<h2>ViewData主要人物:@ViewData["performer"]</h2>
<h3> ViewData上映时间:@ViewData["Releasetime"]</h3>

3.显示效果如下

第三种方式——TempData具备和ViewData一致的功能、除此之外、利用TempData还能够进行视图跳转数据传递

1.在控制器中添加如下代码

 public class ViewBagController : Controller
    {
        // GET: ViewBag
        public ActionResult Index()
        {
            TempData["Dramaname"] = "都挺好";
            TempData["performer"] = "苏大强";
            TempData["Releasetime"] = "2017";
            return RedirectToAction("Temp");
        }
        public  ActionResult Temp()
        {
            return View();
        }
    }

新建一个Temp视图代码如下


@{
    ViewBag.Title = "Temp";
}
<h1>跳转视图——剧名:@TempData["Dramaname"]</h1>
<h2>跳转视图——主要人物:@TempData["performer"]</h2>
<h3> 跳转视图——上映时间:@TempData["Releasetime"]</h3>

显示效果

第四种方式——强类型视图

1.在控制器中添加如下代码

  public class ViewBagController : Controller
    {
        // GET: ViewBag
        public ActionResult Index()
        {
            return View(new Student() { Name="苏大强",Id=1});
        }
    }
    public class Student
    {
        public string Name { get; set; }
        public int Id { get; set; }
    }

2.定义视图为强类型视图

@model ZhanZeBinMVC.Controllers.Student
@{
    ViewBag.Title = "学生信息展示";
}
<h2>姓名:@Model.Name</h2>
<h2>学号:@Model.Id</h2>

@model ZhanZeBinMVC.Controllers.Student 是强类型视图的标志

3.显示效果

说明:学习记录

技术交流联系:

QQ:754258817

转载请注明出处!!!!!!

猜你喜欢

转载自blog.csdn.net/qq_35574190/article/details/88962356