2011-09-01 79 views
1

asp:PlaceHolders有一個可見的屬性,它控制着他們的內容是否在頁面上呈現。ASP.NET MVC2主頁面PlaceHolder的可見性

我已經在MVC2母版頁中聲明瞭一個PlaceHolder,並將它的可見性設置爲false。

請你能告訴我如何從一個MVC2母版頁繼承的MVC2視圖模板中控制PlaceHolder的可見性嗎?

這似乎是一個簡單的任務,但我很難看到它是如何實現的。我認爲我應該能夠從降序視圖模板(如使用網頁表單代碼隱藏)訪問PlaceHolder,並將其設置爲可見性,但這樣做的方式正在逃避我...

回答

3

Don不要這樣做。佔位符來自傳統WebForms。在ASP.NET MVC應用程序中操作服務器端控件是非常糟糕的,你永遠不應該這樣做。因此,簡單地忘記在用戶控件上設置屬性。幸運的是,Razor佔位符已被完全刪除,並被部分替換。因此,不要編寫以後無法遷移的代碼。

在ASP.NET MVC應用程序中顯示/隱藏部分代碼的一種方法是在視圖中使用if語句。例如:

<% if (Model.ShouldShowSection) { %> 
    <div>Some super section</div> 
<% } %> 

在這個例子中,我們在視圖模型中測試一個布爾值,它即呈現該視圖將設置控制器動作。

+0

感謝您的回答。不幸的是,訪問模型(或ViewData)在主頁面中不可用(並且我想評估主頁面中的條件以保持乾燥)。我們也不使用剃刀(也許我們應該)。在我看來,主頁面應該能夠具有條件元素 - 是否有另一種方法來實現這一目標? – lukkea

+0

@lukkea,你可以有一個基本視圖模型,並強烈地輸入你的母版頁。這個基礎視圖模型類將包含必要的屬性。取決於這個可見性條件來自哪裏,也可能有其他方式來實現它。 –

+0

再次感謝 - 事實證明,我們使用的是「標準」主頁面,而不是「MVC 2視圖主頁面」。現在我已經修復了應用程序以使用「MVC 2視圖母版頁」,我們無法強制將母版頁輸入到模型中,因爲這是一個相當龐大,複雜的應用程序'&一些頁面使用動態類型。但是,'ViewData'可以用來進行條件檢查。 – lukkea