mvc3的實際應用時間還是不長,有些東西正在摸索當中,項目是多用戶多模版店鋪,以下為實際開發過程中的解決辦法,感覺解決方案不是最好的,但是目前只能想到這些,希望園里的大牛們給點建議。
1.項目解決方案的目錄結構。
Syw.Core主要放實體類及依賴注入的程序及插件和數據訪問接口。
Syw.Data.SqlServer完全是一大堆sql,實現Syw.Core里的IData類。對orm我沒深入使用過,還是覺得最大程度的控制我的sql比較放心,所有的集合都是List或者Ilist類型的。
Syw.Services業務處理層,類似以前的bll,這里用的是靜態方法,沒有走接口了,項目不是特別大,一個人開發,接口太多會很累。
Syw.Test單元測試用的,有時候調試返回結果還是很有用的。
Syw.Admin,后台管理,但是這個我參考的nopcommerce,生成的時候直接在網站更目錄下生成Administrator文件夾,View和Content文件夾都在這里,但是dll文件是生成到Syw.Web這個主目錄下的,這樣我就不需要用二級域名來訪問后台了,直接通過http://xxxx.com/admin就可以了。
Syw.Framework主要是一些基礎幫助類。例如圖片處理,郵件發送幫助類,字符串處理,自定義ui等等。
2.模板路徑及結構
a1,a2,b1為不同風格的模板,不僅僅顏色不相同,排版方式也不相同。現在只有三個模板,通過這種方式選擇模板。a1,a2為店鋪類的,a3為服務類企業用的。
_LayoutStore.cshtml是店鋪的主模板頁。通過@Hmtl.Action來訪問ChildAction加載頁面,@RenderBody() 加載主頁面。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <title>@ViewBag.Title -ooxx網</title> <meta name="keywords" content="@ViewBag.Title"> <meta name="description" content="@ViewBag.Title"> <script type="text/javascript" src="/Scripts/jquery-1.4.4.min.js"></script> <link href="/StoreThemes/a2/Content/style2.css" type="text/css" rel="stylesheet" /> </head> <body> <!--banner以上的頭部--> @Html.Action("Header", "Store", new { store = ViewBag.Model.Store }) <!--banner以上的頭部 結束--> <!--頂部banner和導航--><!--考慮傳參數model--> @Html.Action("TopBanner", "Store", new { store = ViewBag.Model.Store, act = Url.RequestContext.RouteData.Values["action"].ToString().ToLower() }) <!--頂部banner和導航結束--> <div class="con"> @Html.Action("SideBar", "Store", new { store = ViewBag.Model.Store }) <div class="con-right"> <!-- include --> @RenderBody() <!-- include end --> </div> </div> <!-- 頁腳 --> @Html.Action("Footer","Store",new { store = ViewBag.Model.Store }) <!-- 頁腳 結束 --> </body> </html>
StoreController里的關於我們的Action
#region 關於我們 /// <summary> /// 店鋪簡介 /// </summary> /// <returns></returns> public ActionResult About(int id) { var model = new StoreModel(); model.Store = StoreService.GetStoreById(id); model.CurrentAction = RouteData.Values["action"].ToString().ToLower().ToLower(); ViewBag.Model = model; return View(model.Store.Theme.ViewPath + "About.cshtml", model); } #endregion
ChildAction如下,網站底部
[ChildActionOnly] public ActionResult Footer(StoreInfo store) { var model =new StoreModel(); model.Store = store; if (store.Theme != null) { return PartialView(store.Theme.ViewPath + "Footer.cshtml", model); } else { return PartialView(StoreService.GetStoreConfig().DefaultView + "Footer.cshtml", model); } }
后台選擇模板
通過這種簡單的方式實現了多用戶店鋪多模板的選擇功能,自定義二級域名不在這里贅述了。
自我感覺還有很多不完善的地方,歡迎拍磚。
獨立博客地址:http://www.jqpress.com/post/182.aspx