在Bootstrap開發框架的前端檢視中使用@RenderPage實現頁面內容模組化的隔離,減少複雜度
在很多開發的場景中,很多情況下我們需要考慮抽象、以及模組化等方面的內容,其目的就是為了使得開發的時候關注的變化內容更加少一些,整體開發更加簡單化,從而減少開發的複雜度,在Winform開發的時候,往往可以通過定義基類模組、使用者控制元件的方式實現這個目的,而在Web開發的時候,我們是否也可以利用這些特性呢?特別在MVC的檢視模板裡面的HTML,是否可以利用這些特點,實現變化部分的隔離,從而減少整個頁面的複雜度,同時又可以提高模組的重用性呢?本篇隨筆介紹在Asp.NET的MVC檢視處理上,使用@RenderPage實現頁面內容模組化的隔離,減少複雜度。
1、回顧Winform的介面處理方式
舉工作流表單處理為例說明,由於在處理流程的時候,對於表單的處理,大多數情況下的規則和處理邏輯差不多,因此可以把這些不變的內容抽離到基類介面裡面,對於Winform方式,我們通過繼承不同的業務窗體物件就可以實現了,如下處理方式所示。
由於基類確定了,封裝了大多數的處理規則,那麼在子類介面的時候,需要處理的只是和業務介面有關的賦值或者讀取值的操作了,我們對於不同的業務表單,做起來就很容易了,只需要把變化的部分內容放在子窗體即可。
例如對於出差申請和會議室使用申請的表單,它們的窗體介面繼承關係如下所示。
這個就是Winform介面處理的方式, 對於在Bootstrap開發框架的前端檢視中,如何以類似的規則處理這些介面的分離操作呢?
答案是使用@RenderPage實現頁面內容模組化的隔離。
2、使用@RenderPage實現頁面內容模組化的隔離
一般在開始的時候,我們注意到了,在MVC檢視中使用母版的操作中,已經隔離了頁面佈局相同部分,子窗體只需要定義不同部分的檢視程式碼即可。
而進一步,我們還可以在子頁面中使用@RenderPage來區分隔離不同業務介面的內容的。
例如對於建立表單介面的檢視內容。
上面檢視分為了幾個部分的內容,一個是建立表單的介面處理,其中涉及到的選擇使用者介面,是一個彈出的使用者選擇框,由於選擇使用者處理是一個常見的操作,我們需要把它抽離到一個檢視頁面裡面,可以在需要的時候,直接通過使用@RenderPage實現頁面內容模組化。
@RenderPage("~/Views/Apply/SelectUser.cshtml")
當用戶單擊【選擇流程處理人】的按鈕的時候,彈出一個DIV層,這個就是我們剛才使用@RenderPage實現的選擇使用者介面了,這種處理方式比較彈性化,在需要的時候,包含進來即可,不用把大段大段的程式碼重複複製過來,方便了維護程式碼。
同樣,對於查看錶單介面來說,雖然它的介面內容比新建業務表單的介面複雜很多,但是使用的是一樣的處理方式。
剛才我們看到了,在Winform介面裡面,使用的是下面的檢視繼承的方式。
而在MVC檢視介面裡面,採用的是@RenderPage實現頁面內容的模組化。
這樣主檢視和子檢視雖然同名,但是它們是在不同的控制器名下,這樣我們在父頁面檢視的ViewDetail.cshtml就可以封裝一些常見的處理介面內容,而留下部分和具體業務表單相關的展示內容放在子頁面的ViewDetail.cshtml裡面即可。
在頁面地址中,得到完整的頁面訪問路徑是:/Reimbursement/ViewDetail?id=8f32231d-852e-9f16-6e5a-79031c8ec995,這個URL其實就是訪問具體業務檢視下的內容,但是業務檢視已經引用了父頁面共同的部分。
我們來看看具體業務表單中的檢視頁面程式碼,如下所示。
其中的不變的業務介面內容(理解為父窗體也可以),我們通過引用頁面的方式把它包含進來。
<!--此處放置業務表單的資料呈現,方便隔離,減少複雜性--> @RenderPage("~/Views/Apply/ViewDetail.cshtml", new { applyId = Request["id"] })
這樣就把它們分開維護了,共同的部分就在這個 Views/Apply/ViewDetail.cshtml 檢視頁面裡面了。
而這個共同的部分,則可以封裝常規的事件處理,和介面展示,如下是介面檢視的截圖說明。
其中我們還可以看到通用選擇使用者的檢視層介面
@RenderPage("~/Views/Apply/SelectUser.cshtml")
最後我們來看看兩個不同的檢視介面效果,以烘托一下隔離介面也不影響整體效果,但是可以降低程式碼的維護複雜性。
新建業務流程表單如下介面所示。
檢視具體流程表單明細的介面如下所示。