ASP.NET MVC3 在_ViewStart设置Layout使用RenderAction的注意事項
来源:https://dotblogs.com.tw/lastsecret/archive/2012/03/26/71052.aspx
ASP.NET MVC3 在_ViewStart設定Layout後用RenderAction的注意事項
- 18072
- 0
- ASP.NET MVC學習筆記
- 檢舉文章
ASP.NET MVC3 _ViewStart設定Layout後用RenderAction的注意事項
3/24 TW MVC第一次活動圓滿的結束了,雖然是RC,但也來了不少願意聽我們分享的好朋友。
社群最大的好處就是分享以及回饋,當天有朋友提了一些問題,我們會蒐集起來利用每週四聚會
或是平日的時間一一回覆的。
回到主題,在MVC3中,Views資料夾下的_ViewStart.cshtml是可以設定預設的Layout的,
在MVC3預設專案中,_ViewStart.cshtml會長這樣
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
也就是說,凡是有在頁面上沒有特別指定Layout的話,就會預設使用此設定。
一般來說是滿方便的,但有時太方便也是會出一點小狀況
在頁面上,會呼叫 Html.Action 或 Html.RenderAction (兩者只是回傳方式不同而已)
指定Controller及Action並返回指定的頁面,而在Controller內要return View時,
若是用ViewResult返回,而頁面上又沒特別指定Layout的話,就會造成Layout被重複載入;
若是此Html.Action是在Layout上呼叫, 部分页中会再次显示Layout中的内容。
如上圖,呼叫的地方重覆的載入了Layout。
此種情況最常發生在呼叫 Html.Action 或是利用Ajax呼叫某個Controller與Action後返回頁面時,容易疏忽
了頁面會預設使用_ViewStart中預設的Layout。
解決辦法大概有下列幾種:
- 在 Action return 時,使用return PartialView(); PartialViewResult是不會載入Layout的。
public ActionResult ThisPatial()
{
//return View();
return PartialView();
}
- 在ChildAction 回傳的View中,明確的指定這個頁面的Layout為null或是空字串。
@{
Layout = null;
}
- 不要在_ViewStart中指定Layout,但這應該是下下策了。可視情況使用此方法。
另外補一點小知識,例如_ViewStart或是_Layout都會使用"_"當作前綴字,這是因為不希望以此方式命名
文件被直接的訪問,因此只要是"_"開頭的,被直接瀏覽時就會出現以下錯誤
另外還有一點就是,_ViewStart.cshtml的找尋規則跟Web.config有點類似,會先從離目標文件同層的
資料夾開始找,如果沒有的話再繼續到父資料夾找。因此實際上是可以配置很多個_ViewStart在不同
的資料夾內的。
ASP.NET MVC3 在_ViewStart设置Layout使用RenderAction的注意事項的更多相关文章
- ASP.NET MVC3 在_ViewStart設定Layout後用RenderAction的注意事項
ASP.NET MVC3 在_ViewStart設定Layout後用RenderAction的注意事項 3/24 TW MVC第一次活動圓滿的結束了,雖然是RC,但也來了不少願意聽我們分享的好朋友. ...
- ASP.NET MVC3 系列教程 – 新的Layout布局系统
原文地址:http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html I:回忆MVC2当中MasterPage ...
- MVC中的_viewstart.cshtml(没有设置Layout却引用了布局)
今天Home视图中新增了一个视图,因为不需要设置Layout就没与管他,但是运行起来一看,自动引用了布局,分析了半天 也没看出是哪的错误? 后来尝试着在area中增加了一个同样的视图就没有问题,比较这 ...
- 《asp.net mvc3 高级编程》第三章 视图
一.视图的作用 视图的职责是向用户提供界面.从ASP.NET MVC3开始,视图数据也可以通过ViewBag属性访问.例如:ViewBag.Message 就等于ViewData["Mess ...
- Log4Net异常日志记录在asp.net mvc3.0的应用
前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...
- ASP.NET MVC3 Razor 调试与预加载
目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载 在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...
- Log4Net异常日志记录在asp.net mvc3.0的应用(转载)
这篇博客写的很好:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html 前言 log4net是.Net下一个非常优秀的开源 ...
- ASP.NET MVC3 Model验证总结 @Html.ValidationSummary(true)
http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...
- jQuery Uploadify在ASP.NET MVC3中的使用
1.Uploadify简介 Uploadify是基于jQuery的一种上传插件,支持多文件.带进度条显示上传,在项目开发中常被使用. Uploadify官方网址:http://www.uploadif ...
随机推荐
- mysql客户端连不上数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges ...
- 关于opengl的ActiveTexture以及bindXxx函数的分析
1.GLBindxxx,意思就是,将xxx指定为当前对象,之后的操作都是针对这个xxx进行. 比如,GLBindBuffer(bufferTarget, bufferId),就是指定bufferid和 ...
- JDK设计模式之——工厂模式
1.首先来看最普通的工厂模式 1.1 定义一个需要工厂生产的java类 package javaee.net.cn.factory; class Person{ private int age; pr ...
- HTML5与CSS3权威指南笔记案例1
第1章 <!DOCTYPE html> <meta charset = "UTF-8"> <title> Search </title&g ...
- Java面试集合(七)
前言: Java面试集合(六) 的回顾,对于final可以修饰常量,方法,和类,一旦常量定义好后就不可改变,而方法,用final来修饰方法,方法不可重载,继承,重写,final用来修饰类,该类不能被继 ...
- eureka相关异常
1. eureka相关异常 1.1. 异常信息 Error creating bean with name 'eurekaAutoServiceRegistration': Singleton bea ...
- wav转txt格式的代码实现(c,python)
平时经常做音频算法,经常用得到wav转txt的转换,这里就做个备忘,自己写了一些小代码来实现这个目标: 第一个是c代码的实现: #include <stdio.h> #include &l ...
- conda添加多个版本的python
在conda下,新添加一个python环境,如下再添加一个python3.6conda create --name py36 python=3.6然后通过source activate py36来激活 ...
- Android--多线程之图文混排
前言 本周一直在说Android多线程的那些事儿,本篇博客聊一聊Android开发中一个比较经典的案例,网络数据图文混排,本片博客的案例只涉及关于开启多线程访问网络数据,不涉及缓存的内容.众所周知,从 ...
- Android主线程的消息系统(Handler\Looper)
前言: 之前的文章写的都是关于Bitmap和内存的优化技术,这一篇文章给大家谈谈Handler. Handler是Android系统中比较重要的一个知识,在Android多线程面试经常会被问到,在实际 ...