当前位置 : 主页 > 网络编程 > ASP >

asp.net-mvc – MVC @model的含义

来源:互联网 收集:自由互联 发布时间:2021-06-24
在MVC5中,@ model,@ html和@using是什么意思,为什么以及何时我们通常使用(@)以及哪个词跟随它? 例如:@model MVC_Project2.Models.stufftable写在re.cshtml页面的第一页 stufftable是一个属于用户创建新用
在MVC5中,@ model,@ html和@using是什么意思,为什么以及何时我们通常使用(@)以及哪个词跟随它?

例如:@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的知识,因为你可能已经开始了.

网友评论