博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC之从控制器传递数据到视图方式
阅读量:6277 次
发布时间:2019-06-22

本文共 2996 字,大约阅读时间需要 9 分钟。

       为了演示,先定义一个类

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

public class Person    {        public int Id { get; set; }        public string Name { get; set; }        public string BlogAddress { get; set; }        public string Description { get; set; }    }

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

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

    

方式1 (ViewData)

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

ViewData["Person"] = p;

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

@using ASP.NET_MVC_1.Models;  //引用模型模块,视图中HTML中使用Razor书写格式 @+C#代码@{    var p = (Person)ViewData["Person"];}

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

Person

@p.Id

//Razor视图中C#代码前加@

@p.Name

@p.BlogAddress

@p.Description

运行结果如下

 方式2(ViewBag)

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

ViewBag.Person = p;

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

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

获取对象值同上,我们继续看看是否如我们所预想:

方式3(Model) 

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

此时视图中,我们将需要得到该强类型对象: 而获取对象的值则通过Model来获取,如下:

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

Person

@Model.Id

@Model.Name

@Model.BlogAddress

@Model.Description

 

结果

方式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();        }

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

@TempData["info"]

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

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

方式5(Json数据) 

数据存储模型Model:

public class CalendarEvent {     public string id { get; set; }     public DateTime start { get; set; }     public DateTime end { get; set; }     public string backgroundColor { get; set; }     public string title { get; set; }     public string allDay { get; set; } }

 

后台处理数据控制器Controller:

public JsonResult CalendarData() {     Operation op = new Operation();     List
calendarData = op.GetData(); return Json(calendarData, JsonRequestBehavior.AllowGet); }

 

前端代码,使用javascript解析Json数据

 

转载于:https://www.cnblogs.com/CelonY/p/10424033.html

你可能感兴趣的文章
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>
vue中数组变动不被监测问题
查看>>
3.31
查看>>
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
多线程基础知识
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>