2011-12-12 46 views
2

我們正在研究將我們的自定義.net webforms CMS移植到MVC。.net相當於Page.ParseControl()的MVC

我們當前CMS的一個特點是用戶可以將模塊(實際上只是.net用戶控件)添加到富文本編輯器中。這些模塊然後被解析爲一個容器。

plc_controls.Controls.Add(Page.ParseControl(description)); 

在哪裏「描述」是從含有一些純頁面的內容,並且可以包括在標記中的一個或多個用戶控件的數據庫的字段。

在mvc框架中如何容納這種東西?我對MVC不太瞭解,不知道從哪裏開始 - 在這一點上,我們只是調查這一舉措是否有意義。

編輯的一個示例

目前,用戶可以輸入的標記,可以如下所示:

<p>Some text</p> 
<cms:facilities id="facilities" membertypes="2,3,4" runat="server" /> 
<p>Some more text</p> 

這被存儲在稱爲「說明」單個數據庫字段,並在我們的webforms CMS我把這個描述解析成一個控制容器,如上所述。 cms:facilities是一個web用戶控件,它被加載到web.config的pages/control部分。該控件只是呈現兩個段落標籤之間的設施列表。

+0

簡短的回答是,它沒有。在ASP.NET MVC框架中沒有像自定義控件這樣的事情。您很可能可以使用另一種方法獲得類似的行爲,但我們需要更多信息才能給您一個完整的答案。例如,你的這些用戶控件是否依賴於服務器端行爲? – rsenna

+0

@rsenna - 那很好,這個一般概念將如何處理? – ScottE

+0

ASP.NET MVC框架中最接近WebForms用戶控件的是「部分視圖」。你可以從那裏開始。 – rsenna

回答

0

我會給你一個正式的答案,根據我已經在上面的評論中說過。也許這會讓事情變得更清晰。

  1. 將所有用戶控件公開爲部分視圖。
  2. 定義某種特殊標記以呈現您的內容。
  3. 爲您的自定義標記實現自定義分析器(或爲此使用一些第三方庫)。
  4. 根據標記,呈現最終的HTML,其中包含對用戶所選控件的所有引用。

例如,你可能會發布這樣的事情(使用修改BBCode *分析器):

[p]Some text[/p] 
[facilities id="facilities" membertypes="2,3,4"] 
[p]Some more text[/p] 

事實上,這是更安全然後張貼「HTML與ASP.NET服務器標籤「。我相信一些黑客可以使用你目前的富編輯解決方案發布HTML代碼,可以探索一些客戶端或服務器端後門,但也許我錯了...

而且,你再次,你不能使用與ASP.NET WebForms版本一樣,您也可以使用相同的方法 - ASP.NET MVC中不存在服務器標籤。

這當然比以前的ASP.NET WebForms解決方案複雜得多。但AFAIK是你應該如何在ASP.NET MVC中實現它(除非有一些第三方庫能夠做到這一點,我不知道)。

另外,對不起,如果我從一開始就沒有說清楚 - 英語不是我的第一語言,我在向您解釋整個概念時遇到了一些麻煩。

*請參閱Codekicker.BBCode瞭解.NETode中的BBCode實現。事實上,AFAIK可以與markItUp!集成 - 這將免費爲您提供幾乎完整的富編輯器解決方案。

+0

謝謝@rsenna。這是我感興趣的最後一步。我確實發現了這個 - 粘土 - Orchard .net開源cms項目的一部分:http://weblogs.asp.net/bleroy/archive/2010/08/16/粘土延展-C動態對象部分-1-爲什麼-WE-需要,it.aspx – ScottE