ASP.NET Web開(kāi)發(fā)框架之一 功能導(dǎo)航
功能導(dǎo)航主要解決如何布局功能,把功能如何合理的布置到頁(yè)面中?,F(xiàn)在流行的一種方案是左右結(jié)構(gòu)的導(dǎo)航,左邊樹(shù)狀的菜單,右邊顯示明細(xì)功能。實(shí)現(xiàn)出來(lái)的效果圖如下所示
同版本的C/S程序的界面,也是以同樣的效果出現(xiàn)
Web左邊點(diǎn)擊樹(shù)節(jié)點(diǎn),右邊打開(kāi)相應(yīng)的功能列表,顯示該節(jié)點(diǎn)下面有哪些功能。而這些功能節(jié)點(diǎn),均是用菜單設(shè)計(jì)器設(shè)計(jì)實(shí)現(xiàn),以方便客戶定制主界面。菜單設(shè)計(jì)器的設(shè)計(jì)樣式如下
關(guān)于如何實(shí)現(xiàn)樹(shù)節(jié)點(diǎn)的母子關(guān)系,有很多辦法。一種辦法是給樹(shù)的每個(gè)節(jié)點(diǎn)加一個(gè)ParentId,用于指示它的上一級(jí)節(jié)點(diǎn),這樣每設(shè)計(jì)一個(gè)節(jié)點(diǎn),均需要指出它的父節(jié)點(diǎn),以用于呈現(xiàn)母子關(guān)系。另一種方法,以本例子中實(shí)現(xiàn)為例子,1002為Sales的樹(shù)節(jié)點(diǎn),它的子節(jié)點(diǎn)全部用1002XX來(lái)標(biāo)識(shí),如上圖中所示,100201表示日記帳,100202表示報(bào)表,100203表示查詢。前一種方法,請(qǐng)參考框架數(shù)據(jù)庫(kù)中的表X_Menu,后一種請(qǐng)參考表UserGroupMenu。
導(dǎo)航的另一個(gè)目的,要實(shí)現(xiàn)中英文自動(dòng)切換,以方便不同的用戶習(xí)慣偏好。Enterprise Solution系列的組件,均內(nèi)置了中英文切換的功能,可以在Settings中,選擇習(xí)慣的語(yǔ)言進(jìn)行設(shè)置。對(duì)于Web應(yīng)用程序,用戶的語(yǔ)言偏好保存在瀏覽器的Cookie中,對(duì)于C/S程序,用戶的語(yǔ)言偏好保存在注冊(cè)表中。
再來(lái)看看,如何快速的找到需要的功能,并打開(kāi)執(zhí)行它。如果您習(xí)慣在左邊的菜單中查找,則可以直接在菜單對(duì)應(yīng)的右邊的功能列表區(qū)域中,打開(kāi)該功能。另一種方法是,在快速啟動(dòng)欄中輸入功能編碼,點(diǎn)擊Go按鈕,此時(shí),它會(huì)在新的選項(xiàng)中頁(yè)面中,打開(kāi)此功能。一般來(lái)說(shuō),系統(tǒng)預(yù)置了三種類(lèi)型的功能。
頁(yè)面功能;報(bào)表;自定義查詢
如何讓一個(gè)ASP.NET頁(yè)面成為功能點(diǎn),并自動(dòng)被系統(tǒng)框架找到呢? 請(qǐng)參考下面的例子代碼
- [Function("AIITRL", "~/module/note.aspx")]
- public partial class note : EntryPageBase
- {
- protected override void PageLoadEvent(object sender, EventArgs e)
- {
- if (!IsPostBack)
- TransactionType = "BlotterEntity";
- base.PageLoadEvent(sender, e);
- }
- }
給頁(yè)面加Function特性,***個(gè)參數(shù)是功能編碼,第二個(gè)參數(shù)是頁(yè)面的絕對(duì)地址。當(dāng)在快速啟動(dòng)欄中輸入AIITRL時(shí),框架會(huì)找到(反射)此頁(yè)面,并在新的選項(xiàng)卡頁(yè)面中打開(kāi)加載此功能。
這里要提到一點(diǎn)不足,對(duì)于ASP.NET,它是被瀏覽器請(qǐng)求執(zhí)行。不同于C/S,可以new一個(gè)窗體,然后Show。我一直在尋找一種方法,可以通過(guò)頁(yè)面的類(lèi)型,來(lái)找到這個(gè)頁(yè)面所在的aspx文件地址,這樣可以省略Function特性的第二個(gè)參數(shù),到目前一直沒(méi)有找到可行的方案。第二個(gè)參數(shù)可以通過(guò)菜單設(shè)計(jì)器來(lái)輔助完成,不過(guò)原理和這里的差不多,也是人工識(shí)別,所以,我直接把地址放在特性參數(shù)中,以用于導(dǎo)航。
第二類(lèi)功能是報(bào)表。先在報(bào)表設(shè)計(jì)器中設(shè)計(jì)此報(bào)表,給予一個(gè)編號(hào),參考如下圖所示
在報(bào)表設(shè)計(jì)窗體中,給予基本的參數(shù)。然后在Web項(xiàng)目的report目錄中,放置報(bào)表文件。理論上,需要支持三大流行的報(bào)表系統(tǒng)。RDLC,微軟客戶端報(bào)表,簡(jiǎn)單,易用,Crystal Report 水晶報(bào)表,功能復(fù)雜強(qiáng)大,Reporting Services 微軟服務(wù)器端報(bào)表。Enterprise Solution Web部分,目前只實(shí)現(xiàn)了RDLC客戶端報(bào)表,其它二項(xiàng)報(bào)表的功能,還有待研究和實(shí)現(xiàn)。這里要提到一點(diǎn),加入一種類(lèi)型的報(bào)表,要實(shí)現(xiàn)如下的基本功能:
1 多語(yǔ)言 基本的中,英,繁體
2 多種版本。Crystal Report 有多種版本,要能識(shí)別各個(gè)版本的報(bào)表文件并加載合適的呈現(xiàn)器(Render)
3 界面輸入與傳值。有的報(bào)表需要傳遞參數(shù),系統(tǒng)要?jiǎng)?chuàng)造界面輸入值,并自動(dòng)的傳入到報(bào)表中
第三類(lèi)功能是自定義查詢。用戶在查詢?cè)O(shè)計(jì)器中設(shè)計(jì)的查詢,Web框架要能解析成界面,呈現(xiàn)給用戶。
在此設(shè)計(jì)的查詢,通過(guò)在快速啟動(dòng)欄中輸入PUPRSQ功能編碼,呈現(xiàn)給用戶如下效果的界面
查詢的結(jié)果,可以導(dǎo)出為EXCEL。關(guān)于如何將query轉(zhuǎn)換為Web界面,在后續(xù)的文章中會(huì)講解原理,在此先略過(guò)。
導(dǎo)航功能的好壞,對(duì)系統(tǒng)的可用性,有一定的影響。試想一下,功能很復(fù)雜的一個(gè)系統(tǒng),用戶要找一個(gè)功能,要找很久都找不到,或是沒(méi)有快捷的途徑找到它,用戶肯定不會(huì)認(rèn)為它好用。其次,快速啟動(dòng)欄的設(shè)計(jì),用一個(gè)功能編碼標(biāo)識(shí)用戶需要的一個(gè)功能模塊,有利于用戶快速執(zhí)行所需要的功能。高級(jí)的用戶不想去樹(shù)節(jié)點(diǎn)中找,則可以此方法執(zhí)行功能。
***,導(dǎo)航菜單是可編輯的,提供一個(gè)菜單編輯器,隨心所欲的設(shè)計(jì)用戶所需要的效果。
原文鏈接:http://www.cnblogs.com/JamesLi2015/archive/2012/09/18/2690025.html
【編輯推薦】