惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
U
Unit 42
H
Hackread – Cybersecurity News, Data Breaches, AI and More
云风的 BLOG
云风的 BLOG
IT之家
IT之家
MyScale Blog
MyScale Blog
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
I
InfoQ
博客园 - 司徒正美

博客园 - 叶鹏

开源一个自己的作品浏览器插件ChaTab,一键提交Prompt到多个AI应用 左右手切换工具xmouse v1.2版本发布 如何做好数字乡村项目 一个2核1G内存的服务器能做什么 产品能力是一种底层能力 小团队产品研发管理V0.0.1 java作品集:企业信息门户webtap .NET作品集:基于svn 的.net 持续集成工具 .NET作品集:linux下的.net mvc cms .NET作品集:linux下的博客程序 一个切换鼠标左右手的小工具 lucene.net已经从孵化器毕业 nopcommerce计划任务分析 orchard之lucene.net索引生成 nopcommerce插件深度剖析 屌丝IT男 mvc3实现用户自定义二级域名 建议博客园成立中国的开源项目组织,同意的顶起 C# foreach,linq,delegate集合查询的性能比较
基于mvc3的razor多用户店铺模板切换设计思路
叶鹏 · 2012-06-02 · via 博客园 - 叶鹏

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