为Asp.net MVC中的RenderSection设置默认内容

简介:

1. RenderSection的简单介绍

Asp.net MVC中提供了RenderSection方法,这样就能够在Layout中定义一些区块,这些区块留给使用Layout的view来实现
比如我们定义的Layout如下, 定义了一个”Footer”的section, 把这个section留给各个view去填充。

复制代码
<!DOCTYPE html>
<html>
     <head>
           <title>Sample Layout</head>
     <body>
            <div>@RenderBody()</div>
            <footer>@RenderSection("Footer")</footer>
     </body>
</html>
复制代码

 在使用该Layout的view中,可以这样来填充“Footer” section.

复制代码
@{
    Layout = "MyLayout.cshtml";

}
<h1>Main Content!</h1>
@section Footer {
    This is the footer.
} 
复制代码

RenderSection方法还有一个参数, 如果使用RenderSection(“Footer”, false) ,则表示,这个section Footer,view中不是必须要实现。

2,在Layout中定义一个具有默认值的Section

问题的由来是这样的,项目中使用到了Jquery 1.4.4, 想升级到Jquery到更高的版本,但是由于已有的一些js代码只能兼容Jquery1.4.4, 所以没有办法简单的把Jquery的引用在Layout中直接替换到更高版本。

这个时候,我想到了section, 不如在Layout中定义一个Jquery的section, 新开发的页面在这个section里面使用更高版本的Jquery, 而原有的页面就还是用旧版本的.
这个section应该有个默认值,也就是就的Jquery引用,新的view中只要替换就可以了。

无奈,MVC中默认的RenderSection没有提供这种实现,于是,通过扩展RenderSection方法,实现了该功能。

3, 具体的实现代码

定义一个静态类WebPageBaseExtension, 扩展RenderSection方法

复制代码
public static class WebPageBaseExtension
{
       public static HelperResult RenderSection(this WebPageBase webPage, string name, Func<dynamic, HelperResult> defaultContents)
       {
           if (webPage.IsSectionDefined(name))
           {
               return webPage.RenderSection(name);
           }
           return defaultContents(null);
       }
}
复制代码

在Layout中使用该方法,定义默认section内容

复制代码
<head>

@this.RenderSection("Jquery", @<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>)
   <script src="@Url.Content("~/Scripts/jquery-ui.min.js")" type="text/javascript"></script>

………

</head>
复制代码

在新开发的页面上,覆盖默认section, 使用新的版本的Jquery

@section Jquery
{
    <script src="@Url.Content("~/Scripts/jquery-1.9.min.js")" type="text/javascript"></script>
}

这样就大功告成了,新版本的Jquery就能够应用到新页面中了,以后再慢慢修改旧的页面,也迁移到新版本的Jquery, 最后就可以移除掉整个Jquery section,一步一步达到渐进升级的过程。



本文转自JustRun博客园博客,原文链接:http://www.cnblogs.com/JustRun1983/p/3231563.html,如需转载请自行联系原作者


目录
相关文章
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
46 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
74 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
55 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
4月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
142 0
|
7月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
211 0
|
7月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
83 0
|
7月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
362 5
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
173 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
108 0