1、ViewBag 和 ViewData使用区别注意
- 只有当要访问的关键字是一个有效的C#标识符时,ViewBag才起作用。(疑问,不理解),比如如果在ViewData["xx"]存放一个值,就不要使用ViewBag访问这个值。
- ViewBag值不能作为动态值传递给扩展方法,比如@Html.TextBox("name",ViewBage.name);
2、渲染视图的重载
- return View()
- return view("/view/product/index.cshtml");
- return view(model)
- return PartialView();//如果布局是_ViewStart.cshtml将不渲染模板页
思考:在重写controller时,可以通过数据库配置将seo的title、key、description直接赋值。在_layout.cshtml使用,好像也可以在指定视图引擎中处理些事情
3、视图常用的名称空间
- @model IEnumerable<mvcApplication1.Model.test>
- @using mvcApplication1.Model @model test
- 在config.web配置
<pages pagebaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="mvcApplication1.Model"/>
</namespaces>
</pages>
4、自定义T4视图模板
安装目录下:....\codeTemplates\ 拷贝到项目的根目录,去掉custom tool 的属性(不知道为什么要去掉)
5、代码表达式
- 核心转换字符@用户来标识-代码的转换,有时候做代码-标识的转换字符(不全懂)
- 出现有二义的表达式时候可以使用()来标识
- @用@@表示
6、html编码
Razor默认是用html编码的,如果不需要则使用html.Raw处理
当在javascript中赋值给变量的时候,要使用javascript字符串编码,而不仅仅是html编码,这点很重要 使用@Ajax.JavaScriptStringEncode
7、代码块
两种情况必须使用{}
- 多行代码
- 调用没有返回值的方法
8、服务端注释
@*这里是注释内容*@
9、调用泛型必须使用()。这个和Razor的引擎解析有关系
10、模板页使用
指定模板
@{
Layout="~/views/shares/_layout.cshtml";
view.Title="index";//view 对象应该是ViewBag
}
@RenderBody() 加载内容页的内容
@RenderSection("Footer") 视图页必须重写重载方法@RenderSection("Footer",false)非必须重载
设置默认值@if(IsSectionDefined("Footer")){RenderSection("Footer")else{//默认值 <span>默认值</span>}}
备注:_viewStart.cshtml优于其他视图先执行
11、配置第三方视图引擎
protect void Application_Start(){
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MyViewEngine());
}
具体配置百度楼。