2

好吧,我還是新來Asp.Net和MVC3。我對事物更加熟悉,但在完成我的第一個Web應用程序(一個簡單的Web表單提交到數據庫)後仍然在嘗試。現在我正在處理較小的項目,例如轉換一些提交電子郵件的舊ColdFusion Web表單。我很容易在MVC3中實現這一點,但我們的所有網頁都在獨立的內容管理系統中,我們的中央HTML模板就在這裏。我already asked a question about this here並沒有得到任何地方。asp.net mvc3 - 外部包含或共享項目之間的佈局?

我們所擁有的是我們的大部分網頁從CMS導出爲直接HTML文件,只有需要數據庫訪問或編程語言才能導出爲ColdFusion的網頁。在我們的CMS中「模板」內部使用ColdFusion代碼很容易。我希望能夠在我的mvc3項目中使用這個HTML模板,但我找不到執行「包含」或鏈接到外部文件的方法。我不確定這是否會起作用,所以我決定將模板複製/粘貼到mvc3,並找出一種方法,我可以在所有我將要做的小項目之間共享此模板(現在稱爲「佈局」)工作。如果模板更改,我不想更新每一個小的mvc3 web應用程序。我瞭解瞭如何使用「區域」,但似乎您不能只將一個區域發佈到Web服務器上的文件夾中,因此必須部署整個項目。

我真正需要的是一種小型mvc3項目使用一個模板的方法,這些小型mvc3項目分散在我們的Web服務器上。這最好是在一個發佈到多個不同文件夾的大型項目中完成,還是可以共享一個共同佈局的許多小型項目完成?這兩種可能之一是?

經過嘗試和嘗試所有這些,我開始認爲MVC不會與我想要的一起工作。它似乎更適合於內聯網應用程序或整個網站,而不是像我想要的那樣的「這裏和那裏」應用程序。我應該學習Web窗體嗎?我知道我可以在我們的CMS中「包含」一個aspx文件,就像我使用ColdFusion一樣。

+0

那麼,你想要一些可以通過_multiple_斷開連接的站點訪問的靜態內容? – Tejs

+0

理想情況下,是的。像「包括」頂級導航XML這樣的東西會有所幫助,但是能夠將整個HTML佈局分割成我可以在某處集中更新的格式不正確的塊是最好的。如果通過MVC無法實現這一點,我明白Web Forms可能是最好的方法,因爲我已經知道我可以**用aspx文件來做這件事。 –

+0

WebForms在這方面不會與MVC有任何不同的功能。無論如何,WebForms在MVC中也是可能的。 – Tejs

回答

0

您的模板是否必須從CMS「導出」?或者,您是否可以擁有一個「存在於」靜態CMS網址上的模板?這是我們爲需要數據庫訪問的應用程序所做的工作/無法在CMS內輕鬆完成,但需要共享相同的外觀和感覺。

您可以做的是將您的普通舊HTML文件生成一個URL,例如,https://cms.domain.tld/templates/designxyz.html。該文件將提供基本的佈局,除非您的自定義應用內容發生變化,您只需字符串「content goes here」。

然後,從MVC應用程序中,您可以調用此URL來獲取HTML內容作爲字符串。一旦你有了字符串,你可以在「content goes here」字符串前後分割它。然後,在你的layout.cshtml文件,你可以這樣做:

@{ 
    const string contentPlaceholder = "content goes here"; 
    var allHtml = GetHtmlTemplateFromLiveServer(); 
    var index = allHtml.IndexOf(contentPlaceholder); 
    var topHtml = allHtml.Substring(0, index); 
    var botHtml = allHtml.Substring(index + contentPlaceHolder.Length); 
} 
@topHtml 
@RenderBody() 
@botHtml 

如果是這樣的工作,你就可以抽象的這一切遠成HTML助手,然後再用在其他項目中該助手( NuGet對此會有好處)。

_Layout.cshtml

@{ 
    var options = new CmsTemplateRenderOptions 
    { 
     Url = "https://cms.domain.tld/templates/designxyz.html", 
     Cache = new TimeSpan(1, 0, 0); 
    }; 
} 
@Html.RenderCmsTemplate(CmsTemplateRenderRegion.Top, options) 
@RenderBody() 
@Html.RenderCmsTemplate(CmsTemplateRenderRegion.Bottom, options) 

然後,更新所有的應用程序的佈局,你只需變更發佈到https://cms.domain.tld/templates/designxyz.html URL。

+0

真的嗎?重複使用跨項目的佈局似乎是一個有效的要求恕我直言。但這種方式確實很難實現,並且可以反向擴展。每次顯示視圖時,都必須調用URL。 –