2012-11-10 101 views
0

我工作/调整默认安装asp.net的MVC 4 ..加了一些看法..asp.net的MVC 4:RenderBody()的型号名称写出页面

,当我尝试将模型传递给我的视图,该模型(名称和命名空间)被写出到页面。

@Model Blah.Web.UI.Models.DirectoryModel 
@{ 
    ViewBag.Title = "Directory"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

时,我认为我的网页,我看到

Blah.Web.UI.Models.DirectoryModel Blah.Web.UI.Models.DirectoryModel

在写两次在页面顶部..

我只是控制器的初始化模式,通过它的视图里面..

我还注意到,这发生在@RenderBody()称为形式_layout ..所以我假设它在我的看法做某处..

即使我注释掉我的观点上的所有代码(接受上述声明)我仍然看到这个字符串写出来。

回答

4

变化

@Model Blah.Web.UI.Models.DirectoryModel 

@model Blah.Web.UI.Models.DirectoryModel 

@model指令用小写m告诉剃须刀什么是模型的类型。

在另一方面@Model用大写M只是调用视图的Model财产ToString并在响应中写入字符串。

这就是为什么

@Model Blah.Web.UI.Models.DirectoryModel 

输出映象:Blah.Web.UI.Models.DirectoryModel Blah.Web.UI.Models.DirectoryModel

首先,它写入Model的的ToString和纯文本行Blah.Web.UI.Models.DirectoryModel的其余部分。

+0

啊谢谢!这是有道理的..但是,声明仍然有效,因为我仍然能够在以后使用该模型..那么声明可选只是为了知识等? –

+1

'@ model'不仅仅是intelisense:幕后mvc为每个视图创建一类'System.Web.Mvc.WebViewPage '。用'@ model'告诉mvc应该是什么类型参数'T'。如果你不使用'@ model',那么它将使用'System.Web.Mvc.WebViewPage ' – nemesv