本文代码要实现的目标:显示可供用户选择的风格模版,并允许其更新选择。

简单流程:

1、从数据库获取风格模版的列表。

2、获取一个用户所选择的风格模版,若该用户从未选择风格模版,那么使用默认选中项

3、用户更改风格模版后保存。

使用的技术:三层架构,mvc,linq,jquery。

废话不多说,直接上图片:

之前的风格:

选择后的风格:

局部视图(partialView)

代码

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<BL.Style>>" %>

<% 
    SelectList list=null;
    if (ViewData["selectList"] != null) {
        list = ViewData["selectList"] as SelectList;
  }
%>

<div  class="itemcontent-font btnHyperLink" style=" text-align:center; width:50%;" >
    请选择样式模版:

<%=Html.DropDownList("aa", list)%> 
    
    <br />

<%=
        Html.ActionLink("取 消", null, null, new { href = "javascript:void(0)", onclick = "$('div#workArea').css('display','none');" })
    %>|
    <%=
        Html.ActionLink("保 存", null, null, new { href = "javascript:void(0)", onclick = "return submitStyle();" })
    %> 
</div>

点击“保存”触发的javascript脚本

//提交个人风格模版
function submitStyle() {
    var styleID = $('#aa').get(0).value;
    window.location.href=。。/../SiteStyle/SubmitStyle?styleID=+ styleID
    return false;
}

Controller中的代码:

代码

/// <summary>
        /// 可供选择的风格模版列表,用户如选择了风格模版,那么StyleID作为下拉框的被选择项;
        /// 如果用户没有选择风格模版,那么选中项默认为StyleID==1的项
        /// </summary>
        /// <returns></returns>
        public ActionResult StyleCanSelected(int typeID) 
        {
            Guid authorGuid = Helpers.Helper.GetVisitor().UserGuid;
            //获取样式模版列表
            List<BL.Style> styles = obj.GetStylesByType(typeID);
            //获取用户选中的样式模版
            BL.Style style = obj.GetStyleByUser(authorGuid);
            //用户未选择样式模版时,默认StyleID == 1的模版
            if (style == null) 
            {
                style = new BL.Style() { StyleID = 1 };
            }

//用户绑定dropdownlist的数据,styles为业务逻辑的数据,
            //StyleID为value字段,StyleDescription为text字段,style.StyleID为选中项的value值
            SelectList selectList = new SelectList(styles, "StyleID", "StyleDescription",style.StyleID);

ViewData["selectList"] = selectList;
            return View(styles);
        }

/// <summary>
        /// 提交用户的选择,保存到数据库
        /// </summary>
        /// <param name="styleID"></param>
        /// <returns></returns>
        public ActionResult SubmitStyle(int styleID) 
        {
            Guid authorGuid = Helpers.Helper.GetVisitor().UserGuid;
            obj.SetupStyle(authorGuid, styleID);
            //刷新设置页面
            return RedirectToAction("PersonSetting", "Person", new { ownerGuid = authorGuid });
        }

业务逻辑层(BLL)中代码:

代码

 public class CustomStyleBL
    {
        CustomStyleRep obj = new CustomStyleRep();

/// <summary>
        /// 获取一种类型的风格模版列表
        /// </summary>
        /// <param name="typeID"></param>
        /// <returns></returns>
        public List<Style> GetStylesByType(int typeID) 
        {
            return  obj.GetStylesByType(typeID).ToList();
        }

/// <summary>
        /// 设置用户风格模版
        /// </summary>
        /// <param name="userGuid"></param>
        /// <param name="styleID"></param>
        /// <returns></returns>
        public int SetupStyle(Guid userGuid, int styleID) 
        {
            return obj.SetupStyle(userGuid, styleID);
        }

/// <summary>
        /// 获取一人的风格模版
        /// </summary>
        /// <param name="userGuid"></param>
        /// <returns></returns>
        public Style GetStyleByUser(Guid userGuid) 
        {
            return obj.GetStyleByUser(userGuid);
        }

}

数据访问层(DAL)中代码:

代码

public class CustomStyleRep
    {
        EschoolBLDataContext db = new EschoolBLDataContext();
        
        /// <summary>
        /// 获取指定类别的风格模版
        /// </summary>
        /// <param name="typeID"></param>
        /// <returns></returns>
        public IQueryable<Style> GetStylesByType(int typeID)
        {
            IQueryable<Style> query = db.Style.Where(u => u.TypeID == typeID);
            return query;
        }

/// <summary>
        /// 设置风格模版
        /// </summary>
        /// <param name="userGuid"></param>
        /// <param name="styleID"></param>
        /// <returns></returns>
        public int SetupStyle(Guid userGuid,int styleID)
        {
            var userStyle = db.UserStyle.SingleOrDefault(u => u.UserGuid == userGuid);
            if (userStyle != null)
            {
                //更新风格模版
                userStyle.Style = db.Style.SingleOrDefault(u => u.StyleID == styleID);
            }
            else 
            {
                //添加风格模版
                userStyle = new UserStyle
                {
                    UserGuid = userGuid,
                    StyleID = styleID,
                    ModifyTime = DateTime.Now
                };
                db.UserStyle.InsertOnSubmit(userStyle);
            }
            int count = db.GetChangeSet().Inserts.Count + db.GetChangeSet().Updates.Count;
            db.SubmitChanges();

return count;
        }

/// <summary>
        /// 获取用户的风格模版
        /// </summary>
        /// <param name="userGuid"></param>
        /// <returns></returns>
        public Style GetStyleByUser(Guid userGuid)
        {
            var userStyle = db.UserStyle.SingleOrDefault(u => u.UserGuid == userGuid);
            if(userStyle!=null)
            {
                return userStyle.Style;
            }else
            {
                return null;
            }

}
        
    }

转载于:https://www.cnblogs.com/pkurain/archive/2009/12/16/1625381.html

实现qq邮箱换肤(第一季 )相关推荐

  1. 网易云--手机QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没?

    面试官: 网易云QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没? 心理分析:没有接触过换肤技术 第一次听到该名词肯定会很茫然.面试官考的是对资源加载,监听布局,有没有了解.本文从换肤实战一 ...

  2. 网易换肤第一篇:换肤技术解密!

    参考 脑图:https://note.youdao.com/s/Q1e6r39j 最终效果: Demo源码:点击跳转 技术点分析 换肤的核心思路主要是在setContentView()之前调用setF ...

  3. Android插件化的思考——仿QQ一键换肤,思考比实现更重要!

    Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 今天群友希望写一个关于插件的Blog,思来想去,插件也不是很懂,只是用大致的思路看看能不能模拟一个,思路还是比较重要的,如果你有兴趣的 ...

  4. android 仿qq换肤功能,Android插件化的思考——仿QQ一键换肤,思考比实现更重要!.doc...

    Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 关于QQ的换肤,他们的实现思路我不是很清楚,但是你可以看一下这张换肤的截图 我们想使用哪个主题就直接下载就好了,这一实现的过程我们大致 ...

  5. 微信前夜——QQ 邮箱

    微信前夜--QQ 邮箱 作为张小龙在腾讯的开山之作,QQ 邮箱是邮箱服务的一个新里程碑. 2006 年初的广研年会,是 QQ 邮箱团队的分水岭,因为那一天,他们被逼到了墙角.所有人记忆犹新的是,当时张 ...

  6. QQ换肤源码实战,一步一步教你操作

    各位大佬周末快乐,没错,无聊的我又在搞事情. 之前写过几篇讲解换肤原理的文章,没看过的朋友可以在文末链接点击跳转查看. 本文是一个换肤的实战Demo,有兴趣的朋友可以下载参考:Demo下载地址. 正文 ...

  7. 换肤实例二,可扩展类型换肤库

    榨干剩余价值,这是第二个实例 步骤与第一个示例类似,如果不清楚请参考:QQ换肤源码实战,一步一步教你操作!! Demo下载 PPT下载 About 网易换肤第一篇:换肤技术解密! 网易换肤第二篇:本地 ...

  8. 网易换肤第二篇:本地换肤实现!

    完整脑图:https://note.youdao.com/s/V2csJmYS Demo源码:点击下载 技术分析 我们在换肤的第一篇介绍了换肤的核心思想.就是在setContentView()之前调用 ...

  9. win10邮件配置qq邮箱和outlook邮箱

    文章目录 前言-个性化推荐 配置 qq 邮箱 详细步骤 卡住转圈没反应 不合理的地方 配置 outlook 邮箱 其他设置 前言-个性化推荐 本人使用私人邮箱-qq 邮箱,工作邮箱-outlook 邮 ...

最新文章

  1. Codable 基本使用
  2. 大学毕业标语计算机学院,大学毕业横幅标语创意
  3. poj-3641 Pseudoprime numbers(费马小定理)
  4. springboot中三种xxxx.setAttribute()并与python中flask作对应比较+容器的通俗理解
  5. eclipse 3.7安装扩展心得
  6. 【C# 调用 Go 语言】0x1 Hello Golang
  7. 【读书笔记】【独立思考】2018-04-03(1)
  8. poj 3411 Paid Roads (dfs)
  9. 在Raspberry Pi上轻松设置.NET Core并使用VS Code进行远程调试
  10. Oracle结构组成
  11. 控件中按回车键就关闭对话框问题怎么解决?
  12. 【IT】C语言函数中怎么返回一个二维数组
  13. 今日头条们的 App 内容页技术实现与优化 | CSDN技术头条
  14. LETTers比赛第三场 --1002 Ignatius and the Princess III解题报告
  15. 【DIY装机】华硕主板驱动安装失败的问题
  16. Unity到VRay的渲染方法
  17. 使用shell脚本实现二进制、十进制、十六进制转换
  18. Star Way To Heaven 二分 + 并查集 + Prime
  19. 数据库基本概念整理及常用SQL语句
  20. 登陆后台时,弹出Cann't connect to DB!

热门文章

  1. el table 固定表头和首行_vue表格实现固定表头首列
  2. 计算机处理信息的过程按先后顺序可表述为,信息加工理论按照信息处理的先后顺序将记忆区分为三个阶段系统;感觉记忆、()长时记忆。...
  3. wordpress文章页饮用php文件,wordpress主题的文章和页面如何运行php代码?
  4. python的一些解释
  5. python opencv之 Hough圆变换
  6. 解决libstdc++.so.6: version `GLIBCXX_3.4.22' not found
  7. 环境配置:Qt5.5+VS2013+OpenCv3.1.0+Win7(64bit)
  8. 最简单的排序算法(C和C++实现)
  9. 5Python全栈之路系列之字符串格式化
  10. CSS图片裁剪Clip