2012-11-10 31 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