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); } }
后台选择模板
通过这种简单的方式实现了多用户店铺多模板的选择功能,自定义二级域名不在这里赘述了。
自我感觉还有很多不完善的地方,欢迎拍砖。