例如:@model MVC_Project2.Models.stufftable写在re.cshtml页面的第一页
stufftable是一个属于用户创建新用户的表,下面的代码写在同一页面中,创建两个带有两个标签的文本框,两个标签显示登录页面:
@using (Html.BeginForm()) { <div> @Html.LabelFor(u => u.stuffname) @Html.TextBoxFor(u => u.stuffname) </div> <div> @Html.LabelFor(u => u.stuffpass) @Html.PasswordFor(u => u.stuffpass) </div> <input type="submit" /> }在.cshtml文件中,其中的所有内容都是HTML.因此它将完全按照其书面形式写出来.
换句话说,如果你只是输入
model blah
没有@ then,当你渲染视图时,它实际上会在页面上显示模型blah.
@符号是一个指令,告诉Razor引擎接下来是代码,它应该编译它而不是简单地将它写入输出.
所以当你打字
@model blah
这是由razor编译的,并且告诉Razor引擎模型的类型是’blah’,因此当你使用关键字Model时(注意大写字母M,你也必须使用@符号)它会引用到您定义的模型(在本例中为blah).
所以,如果你写
@model blah @Model.Foo
然后,如果blah.Foo包含数字14,它会将数字14写入输出.正如你可能推测的那样,@符号有很多用途,所以如果你说@ Model.Foo你实际上在做类似Response.Write(Model.Foo)的事情.
一般来说,@符号用于从HTML模式转换到代码模式,就像使用旧的ASPX代码块一样<%...%>但是razor更聪明一点并理解上下文你的代码,所以它可以推断你的代码在大多数时间结束的位置,所以没有必要像过去那样有一个结束括号.
@using就像在C#代码中一样,它是在块结束后处理一次性资源的using语句.在许多情况下,Razor使用这种技术来表示代码块的结束.所以,比如说:
@using(Html.BeginForm()) { .... }
Html.BeginForm帮助器返回一个定义IDisposable接口的对象,当using语句结束时会调用该接口,因此在这种情况下BeginForm()输出一个< form> tag,当在using语句的末尾调用IDisposable.Dispose()方法时,它输出< / form>.这是一种技术,用于包装输出标签的其他代码,以便它可以正确关闭他们的HTML.
@Html也只是C#.但是,它调用了HtmlHelper对象(Razor在“ViewPage”类中定义了一个名为Html的对象,它支持视图,这个Html对象是HtmlHelper类型),它调用了在HtmlHelper对象上定义的各种C#扩展方法.如果你不知道C#扩展方法是什么,它是一种扩展对象而不必重写那些对象的方法,这是更高级的C#.可以这么说,像@ Html.TextBox()之类的东西调用HtmlHelper.TextBox()类型的方法,所以它只是一个你可以调用的C#方法,但是这些方法是专门创建的帮助你创建HTML的方法.
这真的有很多,如果你不理解我讨论过的概念,那么你真的需要了解更多有关C#和/或HTML的知识,因为你可能已经开始了.