随笔- 41  文章- 0  评论- 45 
2008年7月11日
在ASP.NET MVC里应该没有人愿意用<asp:Calendar ...>这个控件吧?它必须要求服务器端的一个form,但这已经违背了MVC的原则,所以我们不能用它啦。
或许你可以用javascript的日历来解决你的问题,那也很不错。
我这里向你推荐一个日历“控件”,它是扩展到HtmlHelper的,所以你可以在页面里使用<%= Html.Calendar() %>就可以得到一个标准化的日历了。

要下载源码和例子请到:http://shinyzhu.com/blog/entry/aspnet-mvc-calendar
另外别忘了支持这个项目:http://www.codeplex.com/mvcapps

广告回来,我们继续。

首先说说这个日历的作用,它简单一点地说呢,就是可以显示指定月份的日历,最简单的方式就是 Html.Calendar ,它生成一个当前月份的日历。要指定日期也需要指定一个名字,因为同一个id不能在同一个页面出现多次,所以我这么要求了。代码是:
<%= Html.Calendar("otherName", selectedDate) %>
就可以显示指定日期那个月份了。

其实这个的原理是遍历月份的每一天,然后输出HTML字符串,很简单吧?

我的一个需求是要把当前日志按日期归档,有日志的那天我需要在日历上有一个链接,链接到这一天的归档。

这个就是我扩展它的原因了。

具体应用请看代码:

public static string Calendar(this HtmlHelper helper, string name, DateTime selectedDate, IEnumerable<DateTime> rawDates, string controllerName, string actionName);

这个是方法原型。

像这么用:



得到的效果是:



好了。需要注意的地方就是,目前这个日历链接中,controller和action是参数指定的,values目前只支持date=year-month-daydate=year-month两种格式。你可以在Route配置里配置一个 "blog/archive/{date}“ 然后就可以生成像我的网站那种链接了。很方便吧?

欢迎砸鸡蛋哦!谢谢啦。

posted @ 2008-07-11 18:05 Shiny Zhu 阅读(422) | 评论 (0)编辑
2008年7月2日
以下是2008年7月中国MVP名单:
包建强  曹海军  曹恒云   陈方旭   陈广琛  
陈俊森  陈黎夫  陈缘    崔路明    段君毅  
范楠    冯立超  傅曦    葛涵涛    郭保卫  
胡林    胡铭娅  黄鸣    黄昕     黄振宇  
贾涛    贾笑明  金华    金磊     瞿晟荣  
雷扬    李斌    李皓    李家佳   李建忠  
李晓东  李岩玻  梁凤飚  林立     刘大双  
刘晖    罗江华  马健    马靖     牛可  
彭爱华  彭斌    祁清华  石王冬欣  苏繁  
苏鹏    唐天浩  童广林  王岗     王辉  
王亮    王少葵  王晓烽  王新宇   武眉博  
徐火军  徐晓卓  闫诺    杨海伟   杨明波  
尤扬    于淼    余勇    袁永福   张斌  
张诚    张德强  张杰    张寅生   张玉彬  
赵峰    赵劼    赵俊其  郑华    钟伟  
周建平  周金桥  周圣    周银辉  朱炜  
朱兴亮  朱兴林  朱永光  邹鋆弢

真幸运,我也在里面。
Congratulations, everybody!
其中有不少认识的朋友。:)
posted @ 2008-07-02 10:48 Shiny Zhu 阅读(25) | 评论 (2)编辑
2008年6月14日

ASP.NET MVC Preview 3已经于5月27日发布了,您可以从微软下载中心下载安装程序和文档。相比之前的版本,改进是许多的。

其实从MVC0416版本开始根目录下的Default.aspx就有了变化,起初我以为这样的变化是不好的,因为用到了Response.Redirect,现在我来详细说说这个。

在用Preview 2创建的网站中可能会遇到这样的问题,同一时间访问网站的根目录,有可能有一个访问会返回错误信息!

不知道是不是RPWT,好像其他人没有遇到这个麻烦,但我遇到这个就相当多了。不妨访问这个地址:http://www.scdfw.cn/。我其实没有要打广告的想法。

这个图就是一种结果:



我先打开IE,输入地址并回车,然后立即在打开的FF里把输入好的地址按下回车。就……
因为我把生产服务器的自定义错误关掉了。服务器环境是IIS6,站点添加了通配符映射。

我也在codeplex反映了这个情况,但是好像其他人也没有遇到这个问题。

之后的版本中,Routing可以配置是否对已存在的文件进行route,修改RouteCollection的RouteExistingFiles属性即可。

 

但是,有另外一个问题。转向有时候不管用

网站www.sc-open.com.cn保留了默认的根目录页面,也就是那个有Response.Redirect("~/Home")的。但是打开之后的页面是Index的结果,URL却没有变。

网站www.jiuzhaigoutour.com把默认页面改成了一个普通的页面,但打开却被Route到HomeController的Index。

原因不明。
posted @ 2008-06-14 12:10 Shiny Zhu 阅读(84) | 评论 (2)编辑
2008年5月5日
纯属测试,手机上只能输标题和正文。噢,还可以选择是否发布。over。
posted @ 2008-05-05 09:24 Shiny Zhu 阅读(22) | 评论 (2)编辑
2008年4月22日
     摘要: ASP.NET MVC已经发布了新的源代码,但不是官方版本。大家可以到http://codeplex.com/aspnet看看。在实际项目中,肯定不会像Scottgu的demo那么简单。比如我们需要将数据分页显示。这的确是一个非常重要的功能。MVCToolkit下一个版本会包含一个PagedList<T>支持数据分页,但我已经等不及了。下面就是经过改进的分页类。首先定义一个接口来包含我...  阅读全文
posted @ 2008-04-22 10:25 Shiny Zhu 阅读(116) | 评论 (3)编辑
2008年4月15日
是的,我已经发了一篇日志过去。但是请别被摘要迷惑了,原理只是用到了QQ邮箱的POP/SMTP服务。
1。前提
1)拥有QQ空间和QQ邮箱;
2)开启QQ邮箱的POP/SMTP服务(在设置》帐户下);
3)有.NET Framwork。
2。发吧
代码:
1            MailMessage mail = new MailMessage();
2            mail.From = new MailAddress("yournameorqqnumber@qq.com");
3            mail.To.Add(new MailAddress("yourqqnumber@qzone.qq.com"));
4            mail.Subject = "不爽!";
5            mail.Body = "啊。鼠标又没电了。很不爽……";
6            SmtpClient client = new SmtpClient("smtp.qq.com"25);
7            client.Credentials = new NetworkCredential("yourqqnumber""yourpassword");
8            client.Send(mail);
把代码中相应地方改成你自己的,然后运行即可。
Enjoy it!
偶准备把这个集到自己的Blog中,嘿嘿,就可以QZONE同时更新了。
posted @ 2008-04-15 11:31 Shiny Zhu 阅读(114) | 评论 (0)编辑
ASP.NET MVC Preview 2发布有很多天了。这段时间一直在研究并应用到实际的项目中。我对它的一句话感受是:的确很完美,的确很粗糙。完美的是产生的XHTML代码我可以完全使用XHTML1.1标准DTD了;粗糙的是还不够成熟,View里还有cs代码存在,控制页面的Title属性和服务器控件的数据绑定还得通过View的codebehind代码实现。
如果你还不是很了解它,请从Scottgu发表的 road map 里查看详细的介绍和教程。

这篇日志记几个要点,最近的记忆力越来越差了,真的老了?
1。IIS6下的Routing配置。
按照介绍,在IIS6里应该有如下语法{controller}.mvc/{action}/{id}的Route,需要把mvc扩展名映射到aspnet_isapi.dll来处理请求。但如果这样就得不到一个完美的URL。这不是我想要的啊!其实很简单,我可以把所有的请求都交给aspnet_isapi.dll来处理,虽然在性能上损耗一点点,但得到的成绩是不能估量的。方法就是把aspnet_isapi.dll添加到“通配符应用程序映射”里。即可达到完美URL的目标。
2。Best Practices about Form Design
这里的Form就是web里最基本的Form(不是传统ASP.NET里的Web Form)。上代码:
 1<fieldset>
 2    <legend>Fill the following fields:</legend>
 3    <form action="/Products/Save" method="post">
 4        <p><label for="pname">Name:</label><%= Html.TextBox("pname"%></p>
 5        <p><label for="pcat">Category:</label><%= Html.Select("pcat", ViewData.Categories)%></p>
 6        <p><label><%= Html.CheckBox("prec""Recommanded"false%></label></p>
 7        <p><%= Html.SubmitButton("psubmit""Submit"%></p>
 8    </form>
 9</fieldset>
这是在View里面的well formed XHTML代码(注意不是HTML)。一个好的建议是每一个input都有一个label围绕,这样的一个好处是点“Name"的时候,光标会自动定位到pname这个input文本框里,当然它的好处不仅仅是这一个。要完成这个过程还需要一个Action:
 1public void Save(string pname, int pcat, string prec){
 2  Product product = new Product();
 3  product.Name = pname;
 4  product.CategoryId = pcat;
 5  product.IsRecommanded = !(prec == null);
 6  
 7  dataContext.Products.InsertOnSubmit(product);
 8  dataContext.SubmitChanges();
 9
10  RenderView("SaveOK");
11}
可能你看到了一些非常奇怪的代码。但是目前我不能不这么做。
问题:Action的参数prec为什么不直接用bool类型?
答案:我们知道CheckBox有个checked属性,但在ASP.NET MVC里目前还不能获取到它,不能直接用bool类型的原因也是因为自动映射值是获取控件value属性的值而不是其他属性的值。
[OK,太晚了,未完成……]
posted @ 2008-04-15 04:32 Shiny Zhu 阅读(95) | 评论 (4)编辑
2008年3月7日

今天在XP SP2系统上装了IE8 Beta 1,这篇日志的主题是关于IE8在Web标准方面的一点体会和一点看法。

作为一个Developer和曾经的Designer,在听说了IE8默认使用真正的标准模式渲染网页之后,特别兴奋,下面就从一个用户的角度来看看IE8的表现。

先看看页面的呈现。

测试页面:http://xutour.com/ (这个页面是还过得去的标准设计,而且能通过W3C的HTML验证CSS2验证。)

测试浏览器:IE8 beta 1 for XP 和 Firefox 2.0.0.12

图1。IE8下的页面(点开看大图)

图2。FF下的页面

接下来,从左到右,从上到下来分析这个页面。

首先是Logo。任何web站点几乎都需要并且确实有logo,而且logo一般是链接到首页的。这个站点不例外,例外的是,它使用了CSS Image Replacement的方式让您看上去是图片的logo实际上代码里只是一个文本链接,这样的目的只是让搜索引擎容易辨认。

但是很明显,在IE8下这个链接不起作用了,但logo确实看得到。其他的诸如FF,和IE7,IE6还有IE5.5都能正常显示。

看看HTML代码:

1<div id="logo"><href="http://www.xutour.com/" title="旭途旅游网">旭途旅游</a></div>

然后看看CSS代码:

1#logo{float:left;width:200px;font-size:0;line-height:0;}
2
3#logo a{display:block;width:200px;height:70px;margin:5px;font-size:0;color:#fff;line-height:0;background:url(../i/xutourlogo.gif) no-repeat top left;}

问题在font-size:0;和两个line-height:0;。待细查之后补上。

再看看列表样式吧。多么明显IE8的列表项前的点足足是FF下的4倍大!不知道Vista下是不是这样。

其他地方倒没太大差别,页面下面的部分有被撑大的,也是因为列表。

测试页面的效果就说到这里。再来看看主角 Developer Tools。

我想说的是,这个玩具一点都不好玩。看看人家Firebug:

现在来补充一下我在ff里装的add-ons:最上面的是Web Developer,下面状态栏依次有color picker,HTML Validator和Firebug。

接触和使用Web标准多年,看到全部大写的标签和没有引号的属性,让我感觉回到了HTML4时代,可现在不是啊,HTML5都出来了。罗列让我不爽的地方吧:

1,标签大写;

2,属性没有引号;

3,head里的标签不是原本的顺序(为什么?)……

看CSS标签,这个对于IE8的Developer Tools没什么好说的,仅仅简单把css的定义列了出来,而Firebug可以预览:

继续罗列不爽的地方:

4,CSS辅助工具非常简陋;

再来看脚本调试,在我使用的几个小时中,用IE8打开cnblogs后台编辑日志,结果不能显示编辑器,而且卡住。

js调试页面我们访问http://www.xutour.com/help/AboutXuTour.htm,因为这里面有一个添加到收藏夹的js代码。


IE中难道只能调试内联js代码?而且调试时还提示禁用,启用之后呢?


看来可以调试,兴冲冲地点了“添加到收藏夹”,就仅仅这个样子,Locals变量里什么都没有。

 Firebug里的调试明显详细许多许多。

OK。这玩具就玩到这里,希望下一版本有更多改进。

IE8 is better but still slightly broken

posted @ 2008-03-07 17:47 Shiny Zhu 阅读(379) | 评论 (4)编辑
2008年2月28日
原文出处:http://weblogs.asp.net/fbouma/archive/2004/10/09/240225.aspx

在asp.net论坛架构板块里,

posted @ 2008-02-28 11:47 Shiny Zhu 阅读(295) | 评论 (0)编辑
2008年2月24日
前天打开Live Mail,收到了MVP邀请.因为在微软中文论坛比较活跃.
开心.
posted @ 2008-02-24 12:29 Shiny Zhu 阅读(94) | 评论 (0)编辑