博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView
阅读量:5284 次
发布时间:2019-06-14

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

原文:

 

系列教程:

上一节:

源码下载:

目录

前言

本节我们来看分部视图PartialView的用法。首先我们会创建一个简单的静态分部视图。然后向这个视图中传入Model数据,使其变成动态分部视图。接下来介绍使用ChildAction来调用分部视图,这样就可以加入一些对数据的分析处理。最后介绍用ajax无刷新更新分部视图数据以达到更好的用户体验。

简单分部视图

创建一个PartialView,在解决方案资源管理器中右键点击Shared文件夹选择添加->MVC 5 分部页(Razor)。如下图所示:

文件命名为PartialPage.cshtml,写入如下代码:

This is a partial page.

这样我们就创建好了一个简单的分部视图,现在我们来创建一个Controller和View来调用它。

在Controllers文件夹下创建PartialViewController.cs并写入如下代码:

using System.Web.Mvc;namespace SlarkInc.Controllers{    public class PartialViewController : Controller    {        public ActionResult Index()        {            return View();        }    }}

一个最简单的Controller,就是为了让大家好理解。

右键点击上面的"Index"函数名,选择添加视图。系统会在~\Views\PartialView\文件夹下创建Index.cshtml文件,在这个文件中写入如下代码:

1 @{ 2     Layout = null; 3 } 4 

Before PartialView

5

6 @Html.Partial("PartialPage") 7

8 @{ 9 Html.RenderPartial("PartialPage");10 }11

12

After PartialView

其显示效果如下图所示:

上面代码中第1-3行表示在分部视图中不用加载模板。<hr />是下图所示的分隔线。

从下面显示结果可以看出,PatialPage.cshtml中的内容被显示了两次,这对应两个不同的调用分部视图的函数。第6行Html.Partial函数的作用是返回所调用的PartialView中的内容。其所在的View会负责输出其返回的内容。而第9行的代码则是直接输出所调用的PartialView中的内容。

如果还是不清楚Partial和RenderPartial的关系,可以这样类比:比如我们有一个string叫s,Partial和RenderPartial的关系就相当于s.ToString()和Response.Write(s.ToString())的关系一样。前者是返回内容,后者是输出内容。

带Model的分部视图

前面只是创建了一个静态分部视图,下面我们来把它改造一下来显示Model数据。

修改~\Views\PartialView\Index.cshtml文件,代码如下:

1 @{ 2     Layout = null; 3 } 4 

Before PartialView

5

6 @Html.Partial("PartialPage",1) 7

8 @{ 9 Html.RenderPartial("PartialPage",2);10 }11

12

After PartialView

上面的第6和9行,加入了第二个参数,是一个数字。这个数字就是我们要传给PartialView的Model。

修改~\Views\Shared\PartialView.cshtml文件,内容如下:

@model int

This is a partial page @Model.

第1行表示传入的model是int类型。第2行吧这个数字显示出来。

显示结果如下:

使用ChildAction调用分部视图

前面调用PartialView的方式都是通过一个View来调用PartialView。下面我们来介绍通过View调用ChildAction来返回PartialView。 

首先在PartialViewController.cs里面写一个ChildAction代码如下:

1 [ChildActionOnly] 2 public PartialViewResult ChildAction(DateTime time) 3 { 4     string greetings = string.Empty; 5     if(time.Hour > 18) 6     { 7         greetings = "Good evening. Now is " + time.ToString("HH:mm:ss"); 8     } 9     else if (time.Hour > 12)10     {11         greetings = "Good afternoon. Now is " + time.ToString("HH:mm:ss");12     }13     else14     {15         greetings = "Good morning. Now is " + time.ToString("HH:mm:ss");16     }17     return PartialView("ChildAction",greetings);18 }

第1行,在ChildAction函数的前面写上[ChildActionOnly]表示这个Action只能作为ChildAction使用。

ChildAction返回partialView的好处就是在Action里可以做一些处理和控制。这里第4到16行就是根据获得的时间返回不同的问候语。

第17行返回其对应的PartialView并传入greetings作为Model。

右键点击ChildAction函数名选择创建视图,取名为ChildAction。写入如下代码:

@model string

@Model

这个PartialView很简单,就是把传入的Model显示出来。

修改~\Views\PartialView\Index.cshtml文件,代码如下:

1 @{ 2     Layout = null; 3 } 4 

Before PartialView

5

6 @Html.Action("ChildAction", new { time = DateTime.Now }) 7

8 @{ 9 Html.RenderAction("ChildAction", new { time = DateTime.Now.AddHours(12) });10 }11

12

After PartialView

如图中黄色所示,调用ChildAction同样有两种方法,Html.Action和Html.RenderAction。它们的区别跟Partial和RenderPartial是一样的。这两个函数的第一个参数是要调用的ChildAction的名字,第二个参数是要传递的参数。参数是用匿名对象的方法创建的Object。

运行结果如下:

ajax无刷新更新分部视图

要通过ajax来调用ChildAction返回PartialView,首先要去掉ChildAction开头写的[ChildActionOnly]。因为这种调用方法不算ChildAction调用。

然后修改~\Views\PartialView\Index.cshtml文件,代码如下:

1 @{ 2     Layout = null; 3 } 4  5 

Before PartialView

6

7
8

9

After PartialView

10

显示的结果如下图所示,问候语和时间会每秒更新并且页面不刷新。

上面代码中15-27行用到了Jquery的ajax方法获取数据。第17行url的值是ChildAction对应的路由。第18行传递的数据是名为time的当前时间。第21行,如果成功获取数据则将数据显示出来。

第11行,通过SetInterval函数每秒调用一次LoadAction函数,更新一次数据。

这样就完成了无刷新更新局部页面数据。

结尾

学习技术就好像登山,越往上走就越困难、越吃力。坚持下去,加油!

 喜欢就推荐下吧!

上一节:

作者:

出处:

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。

posted on
2015-01-19 08:46 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/4232909.html

你可能感兴趣的文章
ios中webservice报文的拼接
查看>>
Power BI 报告的评论服务支持移动设备
查看>>
ACdream 1068
查看>>
HDU 2665 Kth number
查看>>
记叙在人生路上对你影响最大的三位老师
查看>>
002.大数据第二天
查看>>
python装饰器
查看>>
树上的路径
查看>>
问题总结
查看>>
软件随笔
查看>>
Linux下SVN自动更新web [转]
查看>>
Openstack api 学习文档 & restclient使用文档
查看>>
poj100纪念
查看>>
NetWork——关于TCP协议的三次握手和四次挥手
查看>>
An easy problem
查看>>
MauiMETA工具的使用(一)
查看>>
LeetCode: Anagrams 解题报告
查看>>
Qt 中获取本机IP地址
查看>>
070102_赌博设计:概率的基本概念,古典概型
查看>>
IT人生的价值和意义 感觉真的有了
查看>>