zoukankan      html  css  js  c++  java
  • ASP.NET MVC之从控制器传递数据到视图

    本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎指出以及批评。

    新建基本项目在Models文件夹下定义如下类:

     1  public class Person
     2     {
     3         public int Id { get; set; }
     4 
     5         public string Name { get; set; }
     6 
     7         public string BlogAddress { get; set; }
     8 
     9         public string Description { get; set; }
    10     }

    我们在控制器的Action方法中实例化此类:

    1 var p = new Person()
    2 {
    3    Id = 98,
    4    Name = "xpy0928",
    5    BlogAddress = "http://www.cnblogs.com/CreateMyself",
    6    Description = "出生非贫即贵,你我无能为力,后天若不加以努力赶之超之,又能怪谁呢!自己都靠不住不靠谱,又能靠谁呢!"
    7 };

    方式1 (ViewData)

    我们利用ViewData以键值对的形式来存储上述实例化的对象,如下:

    ViewData["Person"] = p;
    

    在视图中我们从ViewData中获取存储的值并转换成对象,如下:

    @using ASP.NET_MVC_1.Models;
    
    @{
        var p = (Person)ViewData["Person"];
    }
    

    接着我们获取对象中的值:

    <h1>Person</h1>
    <h3>@p.Id</h3>
    <h3>@p.Name</h3>
    <h3>@p.BlogAddress</h3>
    <h3>@p.Description</h3>
    

      

    方式2(ViewBag)

    将控制器Action方法以ViewBag创建动态表达式来进行,如下:

     ViewBag.Person = p;
    

    在视图中,我们进行如下修改:

    @using ASP.NET_MVC_1.Models;
    
    @{
        var p = ViewBag.Person as Person;
    }

    方式3(Model)

    我们通过控制器中返回的View方法进行传递该对象,如下:

    var p = new Person()
    {
        Id = 98,
        Name = "xpy0928",
        BlogAddress = "http://www.cnblogs.com/CreateMyself",
        Description = "出生非贫即贵,你我无能为力,后天若不加以努力赶之超之,又能怪谁呢!自己都靠不住不靠谱,又能靠谁呢!"
    };
    return View(p);

    此时视图中,我们将需要得到该强类型对象:

    @using ASP.NET_MVC_1.Models;
    
    @model Person;

    而获取对象的值则通过Model来获取,如下:

    <h1>Person</h1>
    <h3>@Model.Id</h3>
    <h3>@Model.Name</h3>
    <h3>@Model.BlogAddress</h3>
    <h3>@Model.Description</h3>

    方式4(TempData)

    从字面意思来理解我们会误认为是临时对象,好像就使用一次就不会再用了,确实是这样吗?很显然不是这样,当然其生命周期确实很短。该对象是将数据从一个控制器的方法传递到另外一个方法上。什么意思呢?我们想象这样一个场景:当我们在控制器的Info方法上添加一个Person的信息后,我们跳转到另外一个方法TempDataObject上来显示该对象已经成功被创建。

    下面我们来演示这种场景:

    public ActionResult Info()
            {
                var p = new Person()
                {
                    Id = 98,
                    Name = "xpy0928",
                    BlogAddress = "http://www.cnblogs.com/CreateMyself",
                    Description = "出生非贫即贵,你我无能为力,后天若不加以努力赶之超之,又能怪谁呢!自己都靠不住不靠谱,又能靠谁呢!"
                };
                //TODO 添加Person到数据库中
                TempData["info"] = "提示:已经成功添加一条数据到数据库中";
                return RedirectToAction("TempDataObject");
            }

    创建一个TempData方法,获取上面传递过来的值,如下:

     public ActionResult TempDataObject()
     {
              return View();
     }

    在方法对应的视图获取传递过来的值:

    <h1>@TempData["info"]</h1>

    我们通过访问Info,观察当跳转过来到该方法时后渲染视图是否能够获取到该值

    当然在上述过程中这是利用将一个Action中的数据通过TempData传递到另外一个Action中,但是我们需注意,这是利用跳转到TempDataObject才会正确显示数据,如果我们直接刷新页面将会出现System.NullReferenceException。

  • 相关阅读:
    POJ 3710 Christmas Game#经典图SG博弈
    POJ 2599 A funny game#树形SG(DFS实现)
    POJ 2425 A Chess Game#树形SG
    LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
    LeetCode Array Easy121. Best Time to Buy and Sell Stock
    LeetCode Array Easy 119. Pascal's Triangle II
    LeetCode Array Easy 118. Pascal's Triangle
    LeetCode Array Easy 88. Merge Sorted Array
    ASP.NET MVC 学习笔记之 MVC + EF中的EO DTO ViewModel
    ASP.NET MVC 学习笔记之面向切面编程与过滤器
  • 原文地址:https://www.cnblogs.com/zhao987/p/13339219.html
Copyright © 2011-2022 走看看