实现qq邮箱换肤(第一季 )
本文代码要实现的目标:显示可供用户选择的风格模版,并允许其更新选择。
简单流程:
1、从数据库获取风格模版的列表。
2、获取一个用户所选择的风格模版,若该用户从未选择风格模版,那么使用默认选中项
3、用户更改风格模版后保存。
使用的技术:三层架构,mvc,linq,jquery。
废话不多说,直接上图片:
之前的风格:
选择后的风格:
局部视图(partialView)
<%
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中的代码:
/// 可供选择的风格模版列表,用户如选择了风格模版,那么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)中代码:
{
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)中代码:
{
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邮箱换肤(第一季 )相关推荐
- 网易云--手机QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没?
面试官: 网易云QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没? 心理分析:没有接触过换肤技术 第一次听到该名词肯定会很茫然.面试官考的是对资源加载,监听布局,有没有了解.本文从换肤实战一 ...
- 网易换肤第一篇:换肤技术解密!
参考 脑图:https://note.youdao.com/s/Q1e6r39j 最终效果: Demo源码:点击跳转 技术点分析 换肤的核心思路主要是在setContentView()之前调用setF ...
- Android插件化的思考——仿QQ一键换肤,思考比实现更重要!
Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 今天群友希望写一个关于插件的Blog,思来想去,插件也不是很懂,只是用大致的思路看看能不能模拟一个,思路还是比较重要的,如果你有兴趣的 ...
- android 仿qq换肤功能,Android插件化的思考——仿QQ一键换肤,思考比实现更重要!.doc...
Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 关于QQ的换肤,他们的实现思路我不是很清楚,但是你可以看一下这张换肤的截图 我们想使用哪个主题就直接下载就好了,这一实现的过程我们大致 ...
- 微信前夜——QQ 邮箱
微信前夜--QQ 邮箱 作为张小龙在腾讯的开山之作,QQ 邮箱是邮箱服务的一个新里程碑. 2006 年初的广研年会,是 QQ 邮箱团队的分水岭,因为那一天,他们被逼到了墙角.所有人记忆犹新的是,当时张 ...
- QQ换肤源码实战,一步一步教你操作
各位大佬周末快乐,没错,无聊的我又在搞事情. 之前写过几篇讲解换肤原理的文章,没看过的朋友可以在文末链接点击跳转查看. 本文是一个换肤的实战Demo,有兴趣的朋友可以下载参考:Demo下载地址. 正文 ...
- 换肤实例二,可扩展类型换肤库
榨干剩余价值,这是第二个实例 步骤与第一个示例类似,如果不清楚请参考:QQ换肤源码实战,一步一步教你操作!! Demo下载 PPT下载 About 网易换肤第一篇:换肤技术解密! 网易换肤第二篇:本地 ...
- 网易换肤第二篇:本地换肤实现!
完整脑图:https://note.youdao.com/s/V2csJmYS Demo源码:点击下载 技术分析 我们在换肤的第一篇介绍了换肤的核心思想.就是在setContentView()之前调用 ...
- win10邮件配置qq邮箱和outlook邮箱
文章目录 前言-个性化推荐 配置 qq 邮箱 详细步骤 卡住转圈没反应 不合理的地方 配置 outlook 邮箱 其他设置 前言-个性化推荐 本人使用私人邮箱-qq 邮箱,工作邮箱-outlook 邮 ...
最新文章
- Codable 基本使用
- 大学毕业标语计算机学院,大学毕业横幅标语创意
- poj-3641 Pseudoprime numbers(费马小定理)
- springboot中三种xxxx.setAttribute()并与python中flask作对应比较+容器的通俗理解
- eclipse 3.7安装扩展心得
- 【C# 调用 Go 语言】0x1 Hello Golang
- 【读书笔记】【独立思考】2018-04-03(1)
- poj 3411 Paid Roads (dfs)
- 在Raspberry Pi上轻松设置.NET Core并使用VS Code进行远程调试
- Oracle结构组成
- 控件中按回车键就关闭对话框问题怎么解决?
- 【IT】C语言函数中怎么返回一个二维数组
- 今日头条们的 App 内容页技术实现与优化 | CSDN技术头条
- LETTers比赛第三场 --1002 Ignatius and the Princess III解题报告
- 【DIY装机】华硕主板驱动安装失败的问题
- Unity到VRay的渲染方法
- 使用shell脚本实现二进制、十进制、十六进制转换
- Star Way To Heaven 二分 + 并查集 + Prime
- 数据库基本概念整理及常用SQL语句
- 登陆后台时,弹出Cann't connect to DB!
热门文章
- el table 固定表头和首行_vue表格实现固定表头首列
- 计算机处理信息的过程按先后顺序可表述为,信息加工理论按照信息处理的先后顺序将记忆区分为三个阶段系统;感觉记忆、()长时记忆。...
- wordpress文章页饮用php文件,wordpress主题的文章和页面如何运行php代码?
- python的一些解释
- python opencv之 Hough圆变换
- 解决libstdc++.so.6: version `GLIBCXX_3.4.22' not found
- 环境配置:Qt5.5+VS2013+OpenCv3.1.0+Win7(64bit)
- 最简单的排序算法(C和C++实现)
- 5Python全栈之路系列之字符串格式化
- CSS图片裁剪Clip