<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Alah's Sky</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/38202/rss</id><updated>2012-02-25T02:14:42Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/38202/rss"/><entry><id>http://www.cnblogs.com/alahfun/archive/2012/02/25/2367333.html</id><title type="text">devtext.com整站源代码</title><summary type="text">devtext项目是我发起的，但是很遗憾，项目一直没有做起来，原本设想的博客程序一拖再拖，最后难产了。对各位很抱歉，特别是我们qq群里面的同志，原本抱着热情来的，结果啥也没学到。devtext.com这个网站基本上算是我个人博客，基本实现了原本设想的博客程序的功能，但作为网站本身来说他还有很多功能没有实现。现在自己的事情太多了，根本忙不过来，不想一拖再拖下去，再一个自己一个人的能力有限。个人水平有限，设计不合理之处，还请各位包涵。作为入门实例的话，我想还是可以的。回想当初自己在学校的时候，天天上博客园希望找到自己可以学习的教程的经历，是我发这代码的初衷。代码和现在网站运行的代码是完全一样的，所</summary><published>2012-02-24T16:09:00Z</published><updated>2012-02-24T16:09:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2012/02/25/2367333.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2012/02/25/2367333.html"/><content type="html">&lt;p&gt;devtext项目是我发起的，但是很遗憾，项目一直没有做起来，原本设想的博客程序一拖再拖，最后难产了。对各位很抱歉，特别是我们qq群里面的同志，原本抱着热情来的，结果啥也没学到。&lt;/p&gt;&lt;p&gt;devtext.com这个网站基本上算是我个人博客，基本实现了原本设想的博客程序的功能，但作为网站本身来说他还有很多功能没有实现。现在自己的事情太多了，根本忙不过来，不想一拖再拖下去，再一个自己一个人的能力有限。&lt;/p&gt;&lt;p&gt;个人水平有限，设计不合理之处，还请各位包涵。作为入门实例的话，我想还是可以的。回想当初自己在学校的时候，天天上博客园希望找到自己可以学习的教程的经历，是我发这代码的初衷。代码和现在网站运行的代码是完全一样的，所以请大家看到代码之后，千万不要去攻击这网站，我就一个人，伤不起啊。&lt;/p&gt;&lt;p&gt;整个用到的技术：.net 4.0 +ef 4.3 + mvc3 razor&lt;/p&gt;&lt;p&gt;数据库的备份文件是sql server2008 r2的格式&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.devtext.com/blogs/detail/43/devtext-com-source-code" target="_blank"&gt;源代码下载&lt;/a&gt;（整个代码的压缩包超过博客园的限制，我把他放在了自己的网站上）&lt;/p&gt;&lt;p&gt;昨晚上发布到首页被管理员给撤下来了，我很不能理解，代码是我自己一个字母一个字母敲出来的，数据库是我自己一个字段一个字段地建出来的，中间还请教过别人怎么做，断断续续地做了已经两年多了，是我自己切切实实的劳动产物，是经过思考的作业，怎么就不能发首页了？比起某些人起个蛊惑的标题，打着分享经验的幌子却在大肆宣传自己的产品比起来，我这不算为过啊。对于那些刚接触.net的，想做这行的初学者，有着实实在在看的到的例子，而且还有个实际运行的demo放在那，难道对他们没有学习的帮助？&lt;/p&gt;&lt;p&gt;的确，我也有宣传网站之嫌，这个我没办法解释。devtext项目是从博客园发起的，也希望在博客园了结，让大家知道这个事情。放在我那网站上，都不会有多少人知道，所以我再一次发到首页。&lt;/p&gt;&lt;p&gt;我的微博 &lt;a href="http://weibo.com/822627678" target="_blank"&gt;http://weibo.com/822627678&lt;/a&gt;&lt;/p&gt;&lt;p&gt;我的QQ：44009743&lt;/p&gt;&lt;p&gt;代码有问题可以问我，代码后续还是会更新，但进度会非常慢。&lt;/p&gt;&lt;p&gt;程序中包含qq登陆和新浪微博登陆的完整的实现过程，有需要的可以看看。另附腾讯社区开放平台OAuth2.0 SDK &lt;a href="http://opensns.codeplex.com/" target="_blank"&gt;http://opensns.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/2367333.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2012/02/25/2367333.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2011/08/21/aspnet-mvc-qq-connect.html</id><title type="text">Devtext QQ登录完整实施过程</title><summary type="text">悲催啊，在公司加班了，但是有些问题没搞的出来，所以写篇文章缓缓神。这文章一直想写的，但一直没时间，嘿嘿。废话少说，上料了。实施环境：asp.net mvc3.0 + ef4.1 + vs20101、你得去http://connect.opensns.qq.com/申请一个账号，会得到一个APP ID和App Key，这两个东东会在生成请求的时候用到。你的去填一些资料，还要提交一些资料审核。2、如果你对腾讯的那一套协议很熟悉的话，你可以自己去写中间的认证过程，如果不熟悉，就可以用大牛们写的程序来。我这边用的是QzoneSDK，是园子里的大牛写的，具体参考地址：http://qqconnect.c</summary><published>2011-08-20T17:24:00Z</published><updated>2011-08-20T17:24:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2011/08/21/aspnet-mvc-qq-connect.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2011/08/21/aspnet-mvc-qq-connect.html"/><content type="html">&lt;p&gt;悲催啊，在公司加班了，但是有些问题没搞的出来，所以写篇文章缓缓神。这文章一直想写的，但一直没时间，嘿嘿。废话少说，上料了。&lt;/p&gt;&lt;p&gt;实施环境：asp.net mvc3.0 + ef4.1 + vs2010&lt;/p&gt;&lt;p&gt;1、你得去&lt;a href="http://connect.opensns.qq.com/"&gt;http://connect.opensns.qq.com/&lt;/a&gt;&amp;nbsp;申请一个账号，会得到一个APP ID和App Key，这两个东东会在生成请求的时候用到。你的去填一些资料，还要提交一些资料审核。&lt;/p&gt;&lt;p&gt;2、如果你对腾讯的那一套协议很熟悉的话，你可以自己去写中间的认证过程，如果不熟悉，就可以用大牛们写的程序来。我这边用的是QzoneSDK，是园子里的大牛写的，具体参考地址：&lt;a href="http://qqconnect.codeplex.com/"&gt;http://qqconnect.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3、以上两步完成之后，在你的config文件中appsetting节点添加以下三个配置项&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;add key="QzoneCustomerKey" value="11111" /&amp;gt;&lt;br/&gt;&amp;lt;add key="QzoneConsumerSecret" value="1111111" /&amp;gt;&lt;br/&gt;&amp;lt;add key="QzoneCallbackUrl" value="/site/qzonecallback"/&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;　QzoneCustomerKey对应app id，QzoneConsumerSecret 对应app key ，QzoneCallbackUrl是用qq登录之后，腾讯那边回调你完整的路径。&lt;/p&gt;&lt;p&gt;4、因为我将controller单独作为一个项目，所以将QzoneSDK.dll添加到这个项目&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在页面上放置按钮，打开qq登录的页面，然后登录成功之后回调您的网站的页面。此时如果用户在你的网站有账号，那就可以绑定现有账号，或者新注册一个账号。如果你是新建站，也可以完全使用qq登录来作为用户体系。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下面上代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;//qq登录页面&lt;br/&gt;public ActionResult QzoneLogin ( ) {&lt;br/&gt;string key = ConfigurationManager.AppSettings["QzoneCustomerKey"];&lt;br/&gt;string secret = ConfigurationManager.AppSettings["QzoneConsumerSecret"];&lt;br/&gt;var context = new QzoneSDK.Context.QzoneContext(key, secret);&lt;br/&gt;var callbackUrl = ConfigurationManager.AppSettings["QzoneCallbackUrl"];&lt;br/&gt;var requestToken = context.GetRequestToken(callbackUrl);&lt;br/&gt;var authenticationUrl = context.GetAuthorizationUrl(requestToken, callbackUrl);&lt;br/&gt;HttpContext.Session["qzonetokenkey"] = requestToken.TokenKey;&lt;br/&gt;HttpContext.Session["qzonetokensecret"] = requestToken.TokenSecret;&lt;br/&gt;return new RedirectResult(authenticationUrl);&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;//回调页面&lt;br/&gt;public void QzoneCallback ( ) {&lt;br/&gt;if (Request.QueryString["oauth_vericode"] != null) {&lt;br/&gt;var requestTokenKey = HttpContext.Session["qzonetokenkey"].ToString();&lt;br/&gt;var requestTokenSecret = HttpContext.Session["qzonetokensecret"].ToString();&lt;br/&gt;var verifier = Request.QueryString["oauth_vericode"];&lt;br/&gt;string key = ConfigurationManager.AppSettings["QzoneCustomerKey"];&lt;br/&gt;string secret = ConfigurationManager.AppSettings["QzoneConsumerSecret"];&lt;br/&gt;QzoneSDK.Qzone qzone = new QzoneSDK.Qzone(key, secret, requestTokenKey, requestTokenSecret, verifier);&lt;br/&gt;QzoneSDK.Qzone qzone2 = new QzoneSDK.Qzone(key, secret, qzone.OAuthTokenKey, qzone.OAuthTokenSecret, string.Empty, true, qzone.OpenID);&lt;br/&gt;Session["qzoneauthcallback"] = qzone2;&lt;br/&gt;var currentUser = qzone2.GetCurrentUser();&lt;br/&gt;var user = (BasicProfile)JsonConvert.Import(typeof(BasicProfile), currentUser);&lt;br/&gt;if (null != user) {&lt;br/&gt;QQAuthEntity qqauth = BLLFactory&amp;lt;QQAuthService&amp;gt;.Instance.GetQQAuthEntityByOpenID(qzone2.OpenID);&lt;br/&gt;if (qqauth != null) {&lt;br/&gt;AccountState state = UserContext.Instance.QzoneAuthLogin(qzone2.OpenID, Utils.GetRealIP());&lt;br/&gt;if (state == AccountState.Normal) {&lt;br/&gt;Response.Write("&amp;lt;script&amp;gt;opener.location.href=\"/\";window.close();&amp;lt;/script&amp;gt;");&lt;br/&gt;} else {&lt;br/&gt;Response.Write("&amp;lt;script&amp;gt;opener.location.href =\"/site/login\";window.close();&amp;lt;/script&amp;gt;");&lt;br/&gt;}&lt;br/&gt;} else {&lt;br/&gt;Response.Write("&amp;lt;script&amp;gt;opener.location.href =\"/site/binduser\";window.close();&amp;lt;/script&amp;gt;");&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;QQAuthEntity的结构，openid,accesstokenkey,accesstokensecret是腾讯返回的，根本没有qq号，所以很多人误以为会获取到qq号。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;public class QQAuthEntity {&lt;br/&gt;public int ID { get; set; }&lt;br/&gt;public int UserID { get; set; }&lt;br/&gt;public string OpenID { get; set; }&lt;br/&gt;public string AccessTokenKey { get; set; }&lt;br/&gt;public string AccessTokenSecret { get; set; }&lt;br/&gt;public DateTime InsertTime { get; set; }&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;绑定用户的页面&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;public ActionResult BindUser ( ) {&lt;br/&gt;if (Session["qzoneauthcallback"] == null)&lt;br/&gt;return RedirectToAction("Index");&lt;br/&gt;else {&lt;br/&gt;return View();&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;在BindUser页面上实现绑定或者创建用户，后台代码就不提供了。&lt;/p&gt;&lt;p&gt;有几点注意的：1、在调试时，必须使用80端口。&lt;/p&gt;&lt;p&gt;　2、修改本地host，将你需要登录的域名指向本地&lt;/p&gt;&lt;p&gt;　以上两个不做的话，你都没办法调试&lt;/p&gt;&lt;p&gt;　3、&lt;strong&gt;在调试的时候，不要使用localhost，得使用域名，如http://www.devtext.com，完整的形式，不然HttpContext.Session["qzonetokenkey"]和HttpContext.Session["qzonetokensecret"]会为null，你在本地根本就获取不到。这个很郁闷的，一开始不知道，还以为是sdk的问题了。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;补充，qq返回的用户头像有三个尺寸规格的，你可以不使用sdk里面的用户模型&lt;/p&gt;&lt;p&gt;具体效果可以访问&lt;a href="http://www.devtext.com" target="_blank"&gt;http://www.devtext.com&lt;/a&gt;，有问题也可以联系我。&lt;/p&gt;&lt;p&gt;应该讲清楚了吧？哈哈哈&lt;/p&gt;&lt;p&gt;ps:你会wf4吗？会的话，联系下我吧，请教你几个问题，非常感谢。嘿嘿&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/2147620.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2011/08/21/aspnet-mvc-qq-connect.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2011/02/16/1955674.html</id><title type="text">不知道是mvc的bug还是form验证的bug，又或者本来就是这样的</title><summary type="text">遇到的情况：程序采用form验证来管理权限，当用户登录之后，任意打开一个他可以访问的页面，在地址栏中将地址复制一下，然后点击退出，页面跳转到登录页面，在地址栏中粘贴刚复制的地址，页面可以打开，再点击其他链接，系统提出要求登录。问题：登出之后为啥还可以打开需验证的页面？实验：起初以为自己的代码写的有问题。后来来了个简化的实验。如下：实验环境：vs2010 + mvc 2.0 ，win7步骤：1、新建一个空的mvc2的应用程序，.net版本为4.0。2、添加一个HomeController，及Login和Index两个view。Login View 代码Index View 代码修改Global文</summary><published>2011-02-15T16:29:00Z</published><updated>2011-02-15T16:29:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2011/02/16/1955674.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2011/02/16/1955674.html"/><content type="html">&lt;p&gt;&lt;strong&gt;遇到的情况&lt;/strong&gt;：程序采用form验证来管理权限，当用户登录之后，任意打开一个他可以访问的页面，在地址栏中将地址复制一下，然后点击退出，页面跳转到登录页面，在地址栏中粘贴刚复制的地址，页面可以打开，再点击其他链接，系统提出要求登录。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：登出之后为啥还可以打开需验证的页面？&lt;/p&gt;&lt;p&gt;&lt;strong&gt;实验&lt;/strong&gt;：起初以为自己的代码写的有问题。后来来了个简化的实验。如下：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;实验环境&lt;/strong&gt;：vs2010 + mvc 2.0 ，win7&lt;/p&gt;&lt;p&gt;&lt;strong&gt;步骤&lt;/strong&gt;：&lt;/p&gt;&lt;p&gt;1、新建一个空的mvc2的应用程序，.net版本为4.0。&lt;/p&gt;&lt;p&gt;2、添加一个HomeController，及Login和Index两个view。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt; public class HomeController : Controller&lt;br/&gt;    {&lt;br/&gt;        //&lt;br/&gt;        // GET: /Home/&lt;br/&gt;[HttpGet]&lt;br/&gt;[Authorize]&lt;br/&gt;        public ActionResult Index()&lt;br/&gt;        {&lt;br/&gt;            return View();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;[HttpGet]&lt;br/&gt;public ActionResult Login ( ) {&lt;br/&gt;return View();&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;[HttpPost]&lt;br/&gt;public ActionResult Login ( string a ) {&lt;br/&gt;FormsAuthentication.SetAuthCookie("a", false);&lt;br/&gt;return this.Redirect("/Home/Index");&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;public ActionResult LoginOut ( ) {&lt;br/&gt;Response.Cache.SetCacheability(HttpCacheability.NoCache);&lt;br/&gt;Response.Cache.SetNoStore();&lt;br/&gt;System.Web.HttpContext.Current.Session.RemoveAll();&lt;br/&gt;FormsAuthentication.SignOut();&lt;br/&gt;return this.Redirect("/Home/Login");&lt;br/&gt;}&lt;br/&gt;    }&lt;br/&gt;&lt;/div&gt;&lt;p&gt;Login View 代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;body&amp;gt;&lt;br/&gt;    &amp;lt;div&amp;gt;&lt;br/&gt;&amp;lt;%using (Html.BeginForm()) { %&amp;gt;&lt;br/&gt;    &amp;lt;%=Html.TextBox("loginname")%&amp;gt;&lt;br/&gt;&amp;lt;%=Html.Password("password")%&amp;gt;&lt;br/&gt;&amp;lt;input type="submit" value="登录" /&amp;gt;&lt;br/&gt;&amp;lt;%} %&amp;gt;&lt;br/&gt;    &amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;/body&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;Index View 代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;body&amp;gt;&lt;br/&gt;    &amp;lt;div&amp;gt;&lt;br/&gt;    shouye&lt;br/&gt;&lt;br/&gt;&amp;lt;a href="/Home/LoginOut/"&amp;gt;退出&amp;lt;/a&amp;gt;&lt;br/&gt;    &amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;/body&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;修改Global文件和config的默认登录地址，启动程序，先登录，再登出，然后在地址栏中直接输入Home/Index，页面可以打开。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;疑惑&lt;/strong&gt;：不知道是自己孤陋寡闻，还是本来就是这样的。以前没怎么在意，这几天突然发现这个，真的很纠结。貌似代码上的写法应该没有问题，还请园子里面的大牛解答一下。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/1955674.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2011/02/16/1955674.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2011/01/15/1936071.html</id><title type="text">又是一年年会时，发个wpf的抽奖工具</title><summary type="text">又要到年底了，又要抽奖了，哈哈哈。朋友要帮忙写个小程序抽奖，所以就写了这个程序。大体思路是这样的：人员信息是通过xml配置的，在程序启动时，将人员信息存入一个list中。在每一次抽奖时，为每一个人随机生成一个数字代表他的排序ID，然后将list按排序ID排序，然后用DispatcherTimer定时去刷新屏幕上的姓名。在人员信息定义的XML中，如果他的Weight小于等于5（即锁定状态），那他将永远不能被选中，即使抽中，也将变成在list中他的下一个非锁定状态的人。时间写的仓促，前后没多少时间，难免有漏洞，仅供娱乐，详见代码。顺祝大家年底奖金多多，红包多多，礼物多多。哈哈哈哈源代码</summary><published>2011-01-14T18:28:00Z</published><updated>2011-01-14T18:28:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2011/01/15/1936071.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2011/01/15/1936071.html"/><content type="html">&lt;p&gt;又要到年底了，又要抽奖了，哈哈哈。朋友要帮忙写个小程序抽奖，所以就写了这个程序。大体思路是这样的：&lt;/p&gt;&lt;p&gt;人员信息是通过xml配置的，在程序启动时，将人员信息存入一个list中。在每一次抽奖时，为每一个人随机生成一个数字代表他的排序ID，然后将list按排序ID排序，然后用DispatcherTimer定时去刷新屏幕上的姓名。在人员信息定义的XML中，如果他的Weight小于等于5（即锁定状态），那他将永远不能被选中，即使抽中，也将变成在list中他的下一个非锁定状态的人。&lt;/p&gt;&lt;p&gt;时间写的仓促，前后没多少时间，难免有漏洞，仅供娱乐，详见代码。顺祝大家年底奖金多多，红包多多，礼物多多。哈哈哈哈&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/// &amp;lt;summary&amp;gt;&lt;br/&gt;/// 姓名&lt;br/&gt;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;public string Name { get; set; }&lt;br/&gt;/// &amp;lt;summary&amp;gt;&lt;br/&gt;/// 权重&lt;br/&gt;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;public int Weight { get; set; }&lt;br/&gt;/// &amp;lt;summary&amp;gt;&lt;br/&gt;/// 是否锁定&lt;br/&gt;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;public bool IsFixed {&lt;br/&gt;get {&lt;br/&gt;if (this.Weight &amp;lt;= 5)&lt;br/&gt;return true;&lt;br/&gt;else&lt;br/&gt;return false;&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;/// &amp;lt;summary&amp;gt;&lt;br/&gt;/// 排序ID&lt;br/&gt;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;public int OrderID { get; set; }&lt;br/&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/alahfun/Lottery.rar"&gt;源代码&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/1936071.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2011/01/15/1936071.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2010/10/26/1861604.html</id><title type="text">发起一个开源项目-devtext，期望有高手加入</title><summary type="text">本来想出了beta版的时候再来发这个帖子，但怕自己从头的时候路子就走错了，等到beta的时候就来不及，所以今天发这个帖子，期待老鸟指点，大家一起进步。项目描述虽然现在博客平台有很多，wordpress占了单人博客的很大的份额，但是那是php的，作为一名Dotnet开发，在dottext系列代码已经无法找到的时候，还是希望可以开发一个属于Dotnet的、属于汉语环境的博客程序，当然现在我也没那个水平...</summary><published>2010-10-26T08:13:00Z</published><updated>2010-10-26T08:13:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2010/10/26/1861604.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2010/10/26/1861604.html"/><content type="html">&lt;p&gt;本来想出了beta版的时候再来发这个帖子，但怕自己从头的时候路子就走错了，等到beta的时候就来不及，所以今天发这个帖子，期待老鸟指点，大家一起进步。&lt;img src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=devtext&amp;amp;DownloadId=156481&amp;amp;Build=17275" alt="devtext" width="205" height="73" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;项目描述&lt;/strong&gt;&lt;br /&gt;虽然现在博客平台有很多，wordpress占了单人博客的很大的份额，但是那是php的，作为一名Dotnet开发，在dottext系列代码已经无法找到的时候，还是希望可以开发一个属于Dotnet的、属于汉语环境的博客程序，当然现在我也没那个水平，可以达到DotText的水平。希望通过整个项目的开发，来锻炼自己、提升自己的技术，也希望有更多的人可以参与进来。老鸟都是从菜鸟走过来的。希望大拿可以更加爱护我们，菜鸟们也一同成长。&lt;br /&gt;&lt;strong&gt;名称由来&lt;/strong&gt;&lt;br /&gt;Dotnet下有经典的DotText，但可惜现在已经找不到代码了，还有SubText，所以我取名DevText。&lt;br /&gt;&lt;strong&gt;技术路线&lt;/strong&gt;&lt;br /&gt;初定系统采用Asp.net MVC 2.0 + Jquery + SQL Server 2008，项目会在visual studio 2010上开发，个人比较喜欢vs2010，特别是它对js的支持，比vs2008好很多，外加多屏显示等。&lt;br /&gt;&lt;strong&gt;项目站点&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;codeplex: &lt;a href="http://devtext.codeplex.com/" target="_blank"&gt;http://devtext.codeplex.com/&lt;/a&gt;&lt;br /&gt;官网: &lt;a href="http://www.devtext.org" target="_blank"&gt;http://www.devtext.org/&lt;/a&gt; (最近公司比较忙，还没写，前段时间找了个wiki，不过不大好用，给关了)&lt;/p&gt;&lt;p&gt;实例网站: &lt;a href="http://www.devtext.com" target="_blank"&gt;http://www.devtext.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;(程序还没有好了，实例网站肯定是没有完成的，但现在指向的是一个我自己用mvc写的、模仿博客园新闻频道的资讯网站，dudu可别找我啊，呵呵。如有需要，我也可以提供代码，供大家拍砖。谢谢)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;补充&lt;/strong&gt;：&lt;/p&gt;&lt;p&gt;非常感谢大家的支持，真的没想到有这么多的回复。&lt;/p&gt;&lt;p&gt;没有想过以此项目来盈利，如果想盈利的话，那事情是不可能做的好的。&lt;/p&gt;&lt;p&gt;我喜欢编程，发自内心的喜欢。一直希望自己的应用可以有很多人使用，那是种莫大的成就感。也就有了这个项目发起的初衷。但是自己的能力有限，一个人的力量有限，所以希望更多的人参与进来，人多力量大呀。而且一个人难免会存在思维的局限性，和大家在一起，可以集思广益。&lt;/p&gt;&lt;p&gt;项目现在处于架构求证阶段，也没有一个完整的feature list和coding plan，基本上就是空的时候就写。真诚的希望有大拿可以参与进来，去指导我们开发。也希望和我一样的小菜们，一起成长。&lt;/p&gt;&lt;p&gt;刚建了个QQ群：111497879，期待您的加入。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/1861604.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2010/10/26/1861604.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2010/09/15/1827268.html</id><title type="text">asp.net mvc form验证登陆，以及在使用cookies时可能导致无法登陆的原因</title><summary type="text">form验证登陆应该在asp.net webform中也可以使用。最近写了两个小网站，取名A和B，A写好放到网上去了，B还在开发中，在自己的电脑上调试都没问题，可是A在自己电脑上都无法登陆，在其他地方就可以，郁闷了很久没找到原因。后来我在调试B程序中一段ajax请求的时候，突然发现B中的cookie的名称和A中的一直（A的cookie名我改过的，B没改），我把B的config文件改成如下：然后把浏...</summary><published>2010-09-15T09:23:00Z</published><updated>2010-09-15T09:23:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2010/09/15/1827268.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2010/09/15/1827268.html"/><content type="html">&lt;p&gt;form验证登陆应该在asp.net webform中也可以使用。最近写了两个小网站，取名A和B，A写好放到网上去了，B还在开发中，在自己的电脑上调试都没问题，可是A在自己电脑上都无法登陆，在其他地方就可以，郁闷了很久没找到原因。后来我在调试B程序中一段ajax请求的时候，突然发现B中的cookie的名称和A中的一直（A的cookie名我改过的，B没改），我把B的config文件改成如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;forms loginUrl="~/Admin/Login/"  timeout="2880" name=".macxCookie" cookieless="UseCookies" protection="All" requireSSL="false" slidingExpiration="true"/&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;然后把浏览器的cookie全部清空，A就可以登陆了。很多时候我想大家可能会忽略这一点，所以写了这篇随笔，为了使大家对整个问题有更全面的了解，我把整个登陆的过程这写下来。希望大家有用。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;首先config文件配置如上要一个实现IIdentity接口的类&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;using System;&lt;br/&gt;using System.Collections.Generic;&lt;br/&gt;using System.Linq;&lt;br/&gt;using System.Web;&lt;br/&gt;using System.Security.Principal;&lt;br/&gt;&lt;br/&gt;namespace WebMVC.Areas.Admin.Models&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;    public class AppleIdentity : IIdentity&lt;br/&gt;    {&lt;br/&gt;        private System.Web.Security.FormsAuthenticationTicket ticket;&lt;br/&gt;        public AppleIdentity(System.Web.Security.FormsAuthenticationTicket ticket)&lt;br/&gt;        {&lt;br/&gt;            this.ticket = ticket;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        public string AuthenticationType&lt;br/&gt;        {&lt;br/&gt;            get { return "Apple"; }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        public bool IsAuthenticated&lt;br/&gt;        {&lt;br/&gt;            get { return true; }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        public string Name&lt;br/&gt;        {&lt;br/&gt;            get { return ticket.Name; }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        public string FriendlyName&lt;br/&gt;        {&lt;br/&gt;            get { return ticket.UserData; }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;在controller中写个方法来验证登陆&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt; [HttpPost]&lt;br/&gt;        public ActionResult Login(FormCollection collection, string ReturnUrl)&lt;br/&gt;        {&lt;br/&gt;            string loginName = collection["LoginName"];&lt;br/&gt;            string password = Common.AES.Encode(collection["Password"].Replace("'", ""));&lt;br/&gt;            if (BLL.BLLFactory&amp;lt;BLL.User&amp;gt;.Instance.CheckLogin(loginName, password))&lt;br/&gt;            {&lt;br/&gt;                FormsAuthentication.SetAuthCookie(loginName, false);&lt;br/&gt;&lt;br/&gt;                if (!String.IsNullOrEmpty(ReturnUrl))&lt;br/&gt;                {&lt;br/&gt;                    return Redirect(ReturnUrl);&lt;br/&gt;                }&lt;br/&gt;                else&lt;br/&gt;                {&lt;br/&gt;                    return RedirectToAction("Index", "Admin");&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;            else&lt;br/&gt;                return RedirectToAction("Login", "Admin");&lt;br/&gt;        }&lt;br/&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;接着修改Global.asax文件，添加如下代码&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;public override void Init()&lt;br/&gt;        {&lt;br/&gt;            this.PostAuthenticateRequest += new EventHandler(MvcApplication_PostAuthenticateRequest);&lt;br/&gt;            base.Init();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)&lt;br/&gt;        {&lt;br/&gt;            HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];&lt;br/&gt;&lt;br/&gt;            if (authCookie != null)&lt;br/&gt;            {&lt;br/&gt;                string encTicket = authCookie.Value;&lt;br/&gt;                if (!String.IsNullOrEmpty(encTicket))&lt;br/&gt;                {&lt;br/&gt;                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(encTicket);&lt;br/&gt;                    WebMVC.Areas.Admin.Models.AppleIdentity id = new WebMVC.Areas.Admin.Models.AppleIdentity(ticket);&lt;br/&gt;                    GenericPrincipal prin = new GenericPrincipal(id, null);&lt;br/&gt;                    HttpContext.Current.User = prin;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;好了。发首页了啊^-^&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/1827268.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2010/09/15/1827268.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2010/09/05/1818469.html</id><title type="text">JS使用小记</title><summary type="text">项目中使用JS时一些小记1、if($("#span_proposalId").html()==""||$("#span_proposalId").html()==null) 在firefox中html()方法将换行获取为\n，此方法永远为false，span_proposalId中的内容不能有空的换行</summary><published>2010-09-05T07:45:00Z</published><updated>2010-09-05T07:45:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2010/09/05/1818469.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2010/09/05/1818469.html"/><content type="html">&lt;p&gt;项目中使用JS时一些小记&lt;/p&gt;&lt;p&gt;1、if($("#span_proposalId").html()==""||$("#span_proposalId").html()==null) 在firefox中html()方法将换行获取为\n，此方法永远为false，span_proposalId中的内容不能有空的换行&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/1818469.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2010/09/05/1818469.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2010/08/08/1794977.html</id><title type="text">visual studio 2010 &amp;quot;创建控件时出错&amp;quot;解决办法</title><summary type="text">之前我有在博问里面提问（http://space.cnblogs.com/q/16208/），但一直都没答案。我系统都重装了两次了，可还是出现这样的错误，我很郁闷啊。今天我终于找到原因了。我写了一个页面的基类，然后所有的页面都继承这个基类。基类的部分代码如下：就是这个验证权限的函数导致vs2010出现这样的错误。如果override了OnInit函数，新的函数中如果有自己的代码的话，vs2010基...</summary><published>2010-08-07T18:07:00Z</published><updated>2010-08-07T18:07:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2010/08/08/1794977.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2010/08/08/1794977.html"/><content type="html">&lt;p&gt;之前我有在博问里面提问（&lt;a target="_blank" href="http://space.cnblogs.com/q/16208/"&gt;http://space.cnblogs.com/q/16208/&lt;/a&gt;），但一直都没答案。我系统都重装了两次了，可还是出现这样的错误，我很郁闷啊。今天我终于找到原因了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我写了一个页面的基类，然后所有的页面都继承这个基类。基类的部分代码如下：&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;public class BasePage : System.Web.UI.Page&lt;br/&gt;    {&lt;br/&gt;        protected override void OnInit(EventArgs e)&lt;br/&gt;        {&lt;br/&gt;            base.OnInit(e);&lt;br/&gt;           &lt;br/&gt;            CheckPermission();&lt;br/&gt;            &lt;br/&gt;        }&lt;br/&gt;&lt;/div&gt;就是这个验证权限的函数导致vs2010出现这样的错误。如果override了OnInit函数，新的函数中如果有自己的代码的话，vs2010基本上都会发生此错误。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;解决方案如下：&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    public class BasePage : System.Web.UI.Page&lt;br/&gt;    {&lt;br/&gt;        protected override void OnInit(EventArgs e)&lt;br/&gt;        {&lt;br/&gt;            base.OnInit(e);&lt;br/&gt;            if (!this.DesignMode)&lt;br/&gt;            {&lt;br/&gt;                CheckPermission();&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;检查当前是否为设计模式，如果是的话，就不执行自己的代码。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/1794977.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2010/08/08/1794977.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2010/06/25/1764907.html</id><title type="text">第一篇通过live writer写的文章</title><summary type="text">嘿嘿，第一篇通过live writer写的文章啊，试试</summary><published>2010-06-25T01:48:00Z</published><updated>2010-06-25T01:48:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2010/06/25/1764907.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2010/06/25/1764907.html"/><content type="html">&lt;p&gt;嘿嘿，第一篇通过live writer写的文章啊，试试&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/1764907.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2010/06/25/1764907.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/alahfun/archive/2010/06/12/1756748.html</id><title type="text">修改Visual Studio 2010  Splash Screen 上的本产品使用授权信息</title><summary type="text">visual studio 2010 安装的过程中别没有提示要输入用户名，结果安装之后可能在Splash Screen显示的本产品使用权属于 Microsoft，虽然使用起来还是一样，但是总觉得不是很舒服，所以想把它给改了。参见以下步骤：32位的系统中，修改以下注册表键值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Registra...</summary><published>2010-06-11T16:44:00Z</published><updated>2010-06-11T16:44:00Z</updated><author><name>alahfun</name><uri>http://www.cnblogs.com/alahfun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/alahfun/archive/2010/06/12/1756748.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/alahfun/archive/2010/06/12/1756748.html"/><content type="html">&lt;p&gt;visual studio 2010 安装的过程中别没有提示要输入用户名，结果安装之后可能在Splash Screen显示的本产品使用权属于 Microsoft，虽然使用起来还是一样，但是总觉得不是很舒服，所以想把它给改了。&lt;/p&gt;&lt;p&gt;参见以下步骤：&lt;/p&gt;&lt;p&gt;32位的系统中，修改以下注册表键值&lt;/p&gt;&lt;p&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Registration\UserName&lt;/p&gt;&lt;p&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization&lt;/p&gt;&lt;p&gt;64位系统，修改以下注册表键值&lt;/p&gt;&lt;p&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Registration\UserName&lt;/p&gt;&lt;p&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization&lt;/p&gt;&lt;p&gt;改到此步，在Visual Studio 的关于窗口中，授权给的信息已经更改，但是 Splash Screen的信息还是没有改，还需接下来操作&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/img/alahfun/201006/2010061200430192.jpg" /&gt;&lt;/p&gt;&lt;p&gt;运行 devenv.ext /setup命令&lt;/p&gt;&lt;p&gt;其他版本的 Visual Studio 同样适用的&lt;/p&gt;&lt;img src="http://www.cnblogs.com/alahfun/aggbug/1756748.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alahfun/archive/2010/06/12/1756748.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
