2011-04-01 69 views
0

我創建了香草ASP.NET一個通用的用戶控件:ASP.NET MVC一般用戶控制

  • 通過一組屬性,它需要從網頁A一堆的元數據,或B,或任何父頁面恰好存在於。

  • 有時會出現此用戶控件的多個副本,每個副本在一個頁面上處理不同的元數據。

  • 在用戶控件後面的代碼中,根據其元數據動態呈現子元素。

我正在調查ASP.NET MVC。今天是這種活動的第一天,我不知道這個用戶控制的通用性如何移植。頁面與控制器是否有一對一的關係?用戶控件如何?我的通用用戶控件是否直接鏈接到一個或多個控制器?如果是這樣,這個鏈接是如何分配的?或者每個控制器只是將視圖數據傳遞給用戶控件?

任何人都可以爲我提供高級設計想法嗎?或者指點我有用的鏈接?

回答

0

哦,孩子......

Asp.Net MVC的概念也齊頭並進與RESTful風格的網站結構。我不打算再次解釋MVC,因爲有很多很棒的文章,比如http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx

至於用戶控制,整個概念是你不應該複製並且在所有頁面上提供相同的功能。相反,您需要創建一個局部視圖,並將該部分視圖POST數據作爲特定的URL。

然後,您將頁面上的多個表單元素都發布到特定的URL,每個URL都提供該頁面的該部分的功能。

E.G.一個登錄框 - >與登錄/密碼輸入是張貼到/帳戶表單元素/登錄

寄存器箱 - >與名稱/電子郵件/密碼輸入是張貼到/帳戶表單元素/註冊

等等等等

你真的需要溝了很多東西,你在Web窗體學會開始使用MVC。

編輯 - 我相信學習MVC的最好方法就是在那裏進行一個小項目並開始。也是一個建議。 Asp.Net mvc有很多你想要遵循的「約定」。

例如,/home/index的默認頁面。默認頁面是/ index。文件夾的命名結構。

授予你可以改變所有這些,但你通常只是在浪費時間。

+0

謝謝。您能否就我描述的功能擴展MVC的優勢?我無法看到MVC如何改進我的通用用戶控件在vanilla ASP.NET中已經相當不錯的全貌。 – 2011-04-01 23:47:07

+0

哈哈,沒有。 MVC在打包用戶控件方面確實存在缺陷。 MVC的整個想法是將View與Model從Controller中分離出來。所以你理論上不能把它們打包在一起。 – 2011-04-01 23:58:12

+0

我建議你首先獲得MVC的基礎知識。有辦法實現你以後的事情,但這是非常複雜的。現在,如果你想像用戶控件這樣的模塊化,我建議你使用WebForms。也許查找其中一個MVVM框架,以便在WebForm上使用,以便更好和更一致地關注問題。 – 2011-04-02 00:00:13

0

其實只是把你指向的方向,你可以看看下面:

從串行源加載視圖(如SQL /資源嵌入字符串)通過自定義視圖引擎。

或自定義Html助手擴展方法。

這兩個之一,

自定義控制器工廠/激活劑(就可以提供控制器+的MVC網站的引用bin文件外或動作)

的一種方式掛鉤事件到您的自定義用戶控制。頭疼的事情是依賴注入。 (將一項服務注入控制器操作中,將其作爲序列化局部視圖的控制器進行打包)

因此,要使用「粒度獨立」用戶控件,您需要使用這些基礎架構,並且該控件以特殊方式打包。

或者您可以在MVC中使用普通的舊用戶控件。我認爲這樣的作品(谷歌了)

+0

這些是,當你更熟悉MVC:P。如果你剛開始,不需要進入這些。 – 2011-04-02 00:08:21

0

幾個想法讓你滾動。希望這可以幫助。

  • 在思考MVC時,將「視圖」視爲傳統的「頁面」,而不需要背後的代碼。 「視圖」具有控件和HTML以及其他呈現特定的邏輯。

  • 背後的傳統代碼被替換爲「模型」。控制器包含邏輯決定與模型的對象實例傳遞到「查看」

  • 「控制器」沒有硬鏈接到任何視圖。想想它的最好方法。控制器可以處理多個「操作」。每個「行動」的處理代碼可以返回一個「查看」。這是呈現給用戶的「視圖」。

  • 視圖可以跨控制器內的多個操作共享,也可以跨控制器共享。

  • 你必須分解視圖到局部視圖(類似於母版頁/內容頁概念)的靈活性

從這個角度來看,這裏是進行一個可行的辦法。

取幾個.aspx頁面並將它們更改爲視圖。儘管如此,嘗試將代碼隱藏中的代碼重構爲模型。您找到的任何代碼調用數據庫並創建要呈現的數據對象,並將它們移動到控制器中。

以您的通用用戶控件的簡單案例並將其轉換爲視圖,並使用上述.aspx頁面轉換爲視圖的方式將其轉換爲部分視圖。

練習應該讓你對你的移植選項有很好的理解。