MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-partialview.html
上一节:MVC5 + EF6 + Bootstrap3 (13) 查看详情、编辑数据、删除数据
下一节:MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证
源码下载:点我下载
目录
前言
本节我们来看分部视图PartialView的用法。首先我们会创建一个简单的静态分部视图。然后向这个视图中传入Model数据,使其变成动态分部视图。接下来介绍使用ChildAction来调用分部视图,这样就可以加入一些对数据的分析处理。最后介绍用ajax无刷新更新分部视图数据以达到更好的用户体验。
简单分部视图
创建一个PartialView,在解决方案资源管理器中右键点击Shared文件夹选择添加->MVC 5 分部页(Razor)。如下图所示:

文件命名为PartialPage.cshtml,写入如下代码:
<h2>This is a partial page.</h2>
这样我们就创建好了一个简单的分部视图,现在我们来创建一个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文件,在这个文件中写入如下代码:
 @{
     Layout = null;
 }
 <h2>Before PartialView</h2>
 <hr />
 @Html.Partial("PartialPage")
 <hr />
 @{
     Html.RenderPartial("PartialPage");
 }
 <hr />
 <h2>After PartialView</h2>
其显示效果如下图所示:
上面代码中第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文件,代码如下:
 @{
     Layout = null;
 }
 <h2>Before PartialView</h2>
 <hr />
 @Html.Partial("PartialPage",1)
 <hr />
 @{
     Html.RenderPartial("PartialPage",2);
 }
 <hr />
 <h2>After PartialView</h2>
上面的第6和9行,加入了第二个参数,是一个数字。这个数字就是我们要传给PartialView的Model。
修改~\Views\Shared\PartialView.cshtml文件,内容如下:
@model int
<h2>This is a partial page @Model.</h2>
第1行表示传入的model是int类型。第2行吧这个数字显示出来。
显示结果如下:

使用ChildAction调用分部视图
前面调用PartialView的方式都是通过一个View来调用PartialView。下面我们来介绍通过View调用ChildAction来返回PartialView。
首先在PartialViewController.cs里面写一个ChildAction代码如下:
[ChildActionOnly]
public PartialViewResult ChildAction(DateTime time)
{
string greetings = string.Empty;
if(time.Hour > )
{
greetings = "Good evening. Now is " + time.ToString("HH:mm:ss");
}
else if (time.Hour > )
{
greetings = "Good afternoon. Now is " + time.ToString("HH:mm:ss");
}
else
{
greetings = "Good morning. Now is " + time.ToString("HH:mm:ss");
}
return PartialView("ChildAction",greetings);
}
第1行,在ChildAction函数的前面写上[ChildActionOnly]表示这个Action只能作为ChildAction使用。
ChildAction返回partialView的好处就是在Action里可以做一些处理和控制。这里第4到16行就是根据获得的时间返回不同的问候语。
第17行返回其对应的PartialView并传入greetings作为Model。
右键点击ChildAction函数名选择创建视图,取名为ChildAction。写入如下代码:
@model string
<h2>@Model</h2>
这个PartialView很简单,就是把传入的Model显示出来。
修改~\Views\PartialView\Index.cshtml文件,代码如下:
 @{
     Layout = null;
 }
 <h2>Before PartialView</h2>
 <hr />
 @Html.Action("ChildAction", new { time = DateTime.Now })
 <hr />
 @{
     Html.RenderAction("ChildAction", new { time = DateTime.Now.AddHours(12) });
 }
 <hr />
 <h2>After PartialView</h2>
如图中黄色所示,调用ChildAction同样有两种方法,Html.Action和Html.RenderAction。它们的区别跟Partial和RenderPartial是一样的。这两个函数的第一个参数是要调用的ChildAction的名字,第二个参数是要传递的参数。参数是用匿名对象的方法创建的Object。
运行结果如下:

ajax无刷新更新分部视图
要通过ajax来调用ChildAction返回PartialView,首先要去掉ChildAction开头写的[ChildActionOnly]。因为这种调用方法不算ChildAction调用。
然后修改~\Views\PartialView\Index.cshtml文件,代码如下:
 @{
     Layout = null;
 }
 <script src="~/Scripts/jquery-1.10.2.js"></script>
 <h2>Before PartialView</h2>
 <hr />
 <div id="header"></div>
 <hr />
 <h2>After PartialView</h2>
 <script>
     setInterval(LoadAction, 1000);
     function LoadAction()
     {
         var time = new Date();
         $.ajax({
             type: "POST",
             url: '@Url.Action("ChildAction", "PartialView")',
             data: { time: time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds()},
             datatype: "json",
             success: function (data) {
                 $('#header').html(data);
             },
             error: function (XMLHttpRequest, textStatus, errorThrown) {
                 alert(errorThrown);
             }
         });
     }
 </script>
显示的结果如下图所示,问候语和时间会每秒更新并且页面不刷新。
上面代码中15-27行用到了Jquery的ajax方法获取数据。第17行url的值是ChildAction对应的路由。第18行传递的数据是名为time的当前时间。第21行,如果成功获取数据则将数据显示出来。
第11行,通过SetInterval函数每秒调用一次LoadAction函数,更新一次数据。

这样就完成了无刷新更新局部页面数据。
结尾
关于PartialView的内容就介绍到这里。
喜欢就推荐下吧!
上一节:MVC5 + EF6 + Bootstrap3 (13) 查看详情、编辑数据、删除数据
下一节:MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证
作者:Slark.NET
出处:http://www.cnblogs.com/slark/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView的更多相关文章
- MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证
		
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-server-side-validation.html 系列 ...
 - MVC5 + EF6 + Bootstrap3 (13) 查看详情、编辑数据、删除数据
		
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-rud.html 系列教程:MVC5 + EF6 + Boo ...
 - MVC5 + EF6 + Bootstrap3系列教程
		
本系列教程以ASP.NET MVC5为核心框架,使用Entity Framewok6访问数据,并使用Bootstrap3作为前端UI框架.帮助大家开发出一套高效.美观.稳定.实用的软件系统. MVC5 ...
 - (12) MVC5 EF6 Bootstrap3
		
MVC5 + EF6 + Bootstrap3 (12) 新建数据 系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (11) 排序.搜 ...
 - MVC5 + EF6 + Bootstrap3 (12) 新建数据
		
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-create.html 系列教程:MVC5 + EF6 + ...
 - MVC5 + EF6 + Bootstrap3 (10) 数据查询页面
		
文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-search-page.html 系列教程:MVC ...
 - MVC5 + EF6 + Bootstrap3 (16) 客户端验证
		
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-client-side-validation.html 系列 ...
 - MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
		
系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (10) 数据查询页面 源码下载:点我下载 我工作的源码:http://www.jin ...
 - MVC5 + EF6 + Bootstrap3 (9) HtmlHelper用法大全(下)
		
文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-httphelper-part2.html 上一节 ...
 
随机推荐
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
			
给定a.b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a.b文件共同的url? 可以估计每个文件的大小为5G*64=300G,远大于4G.所以不可能将其完全加载到 ...
 - Effective Java 46 Prefer for-each loops to traditional for loops
			
Prior to release 1.5, this was the preferred idiom for iterating over a collection: // No longer the ...
 - Buffer篇
			
// var buf1 = new Buffer(26);/*返回一个新的buffer对象,这个新buffer和老buffer公用一个内存.但是被start和end索引偏移缩减了.(比如,一个buff ...
 - 【VB超简单入门】三、开始编程
			
接下来要进入正题了!同学们要认真看咯~ 第一步:安装VB开发IDE 在这里我推荐大家安装的是VB迷你版,现在大多数同学使用win7,这个版本可以在win7上运行的妥妥的~ 下载链接:http://pa ...
 - TarJan 算法求解有向连通图强连通分量
			
[有向图强连通分量] 在有向图G中,如果两个 顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的 ...
 - redis 五种数据结构详解(string,list,set,zset,hash)
			
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
 - redis  unwatch  discard
			
UNWATCH UNWATCH 取消 WATCH 命令对所有 key 的监视. 如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行UNWATC ...
 - Hive beeline update
			
Hive cli vs beeline The primary difference between the two involves how the clients connect to Hive. ...
 - java使用HttpURLConnection和HttpClient分别模拟get和post请求以及操作cookies
			
1.使用HttpURLConnection public static String getJsonByURL(String base_url) { String url = base_url; St ...
 - UVALive 5962 Strongly Connected Chemicals --最大独立集
			
题意:给n个阳离子和m个阴离子,并给出相互的吸引关系,求一个最大的点集,使其中的每个阴阳离子相互吸引. 解法:枚举每条边,使该条边存在,然后建立反图,求一个最大匹配,此时的点数减去最大匹配与ans求一 ...