1. 自MVC框架升级到3版本以后,Razor 引擎占主流。Razor的简单语法如下:
@变量
@对象.属性
@{ //代码段 }
@{ @:代码段中的文本 }
@{ <text>代码段中有大量的文本</text>}
@if() { //代码段 }
如果想向视图中加入一些动态的内容,可以有以下几种方法,a ,inline code ; b , HTML helper ; c , Partial View 。接下来我们单独讨论每一种方法。
2. inline code
2.1 在View中引入命名空间: @using Project.Models ,这种方法可以将这个命名空间引入到这个单独的View中,如果要想在每一个View中都引入同一个命名空间,可以在Views文件夹下的Web.config (注意,不是更目录下的)文件中修改配置,如下:
<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="Project.Models" </namespaces> </pages> </system.web.webPages.razor>
2.2 理解 Razor HTML String 编码
假设有一个类
public class ClassA { public string MyMethod() { return "<form> This is a form ! </form>"; } }
如果页面中引用了 @classA.MyMethod()的话,那么,这个方法的返回值在View中将会被自动编码成"<form> This is a form ! <form> "。MVC框架之所以这么做,是为了保证页面的安全性。不过,如果程序员确实像让这个方法返回一个form表单的话,MVC框架也是可以做到的,可以这样写:return new MvcHtmlString("<form> This is a form ! </form>") ;
3. 使用 HTML Helper
3.1 创建一个 Inline HTML helper 方法
@{ ViewBag.Title = "Index"; } @helper CreateList(string[] items) { <ul> @foreach(string item in items) { <li> @item </li> } </ul> } <p>Fruits i Like :</p> @*在下面调用*@ @CreateList(new string[]{"苹果","柚子","草莓","火龙果"})
3.2 创建一个External HTML helper 方法
如果创建一个行内的 HTML helper的话,只能在一个特定的页面使用该方法,如果想创建能用于任何页面的 HTML helper 方法的话,可以写一个扩展方法 ,第一个参数必须是 HtmlHelper ,返回值是MvcHtmlString。如下所示
public static class HelperClass { public static MvcHtmlString List(this HtmlHelper helper, string[] listItems) { TagBuilder ulTag = new TagBuilder("ul"); foreach (string item in listItems) { TagBuilder liTag = new TagBuilder("li"); liTag.SetInnerText(item); ulTag.InnerHtml += liTag.ToString(); } return new MvcHtmlString(ulTag.ToString()); } }
@*在下面调用*@
@*先引入HelperClass所在的命名空间*@
@using MvcArea1.Models @{ ViewBag.Title = "Index"; } @Html.List(new string[]{"苹果","柚子","草莓","火龙果"})
3.3 使用MVC框架内置的HTML Helper 方法
a , 创建Form
@using (@Html.BeginForm())
{
}
b, 创建 input Helper
还有一个比较有意思的地方,如果我在Controller中设置 ViewBag.Message = "Hello , world !" ,然后在页面中输入 @Html.TextBox("Message") ,那么,会生成如下的HTML代码:
<input id="Message" name="Message" type="text" value="Hello , world !" /></form>
MVC框架会查找 ViewBag.Message , ViewData["Message"] , @Model.Message ,如果找到存在Message属性的值,就会赋给这个文本框的Value属性
c ,使用强类型的 Input Helper 。
d, 使用列表 Helper
e , 使用 URL 或超链接
4. 使用Section
section 就是一块HTML代码段,在一个View里面定义,在 Layout 页面引用。如:
首先,在View页面里面引用
@{ ViewBag.Title = "Index"; } <h2>Index</h2> @section Footer{ <h4>It's footer here !</h4> } 然后在 Layout 页面里引用 <!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> </head> <body> @RenderBody() @RenderSection("Footer") </body> </html>
5. 使用 PartialPage
选中 Views 目录的某一类视图的文件夹,右键选中 添加 => 视图 在弹出的页面中,选中 "创建为"分部视图。
在新增的页面中添加需要的HTML元素,然后在其他的页面中引用,引用方式如下:
@Html.Partial("MyPartial")
Partial View 也可以创建为强类型的 ,具体操作这里就不赘述了,方式跟创建强类型的页面一样,引用的时候,@Html.Partial 有针对强类型的重载版本。