<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>我的鱼塘--分享</title>
	<atom:link href="http://www.pumaboyd.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.pumaboyd.com</link>
	<description>执着，坚定，友爱，勇敢</description>
	<pubDate>Tue, 06 Jan 2009 15:44:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>MonoRail MVC实践应用(1/6更新)</title>
		<link>http://www.pumaboyd.com/archives/370</link>
		<comments>http://www.pumaboyd.com/archives/370#comments</comments>
		<pubDate>Tue, 16 Dec 2008 15:24:33 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[asp.net]]></category>

		<category><![CDATA[Castle]]></category>

		<category><![CDATA[MonoRail]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=370</guid>
		<description><![CDATA[开始
对于MVC的概念吵的火热,MS的MVC框架也是关注的热点。而在我的印象里，MVC应该和WINFORM编程相关，而且是通过事件机制来完成，特别是观察者模式的运用。后来查了查，发现JAVA社区很早就使用这方面的东西。因为NVelocity的原因，我接触MonoRail。本来是想解决应用系统模板化的问题，结果确杀出一个MonoRail。研究下来发现还是有实际意义，写了下面的一些内容。没有写关于MonoRail的分析、理论上的内容(这方面可以在文章最后的参考找到)，更多的是从实践应用的角度去看待MonoRail的使用。

实践
MonoRail MVC应用-VM/HTML页面
MonoRail MVC应用-构建多层结构的应用程序
MonoRailMVC应用-母板页的Title
MonoRailMVC应用-母板页的内容区域
MonoRail MVC应用-FormHelper&#038;HtmlHelper
MonRail MVC应用-HTML控件的使用
MonoRail MVC应用-CRUD操作
MonoRail MVC应用-页面格式化函数
MonoRail MVC应用-页面数据传递
MonoRail MVC应用-WebControl控件的使用
MonoRail MVC应用-错误处理机制
MonoRail MVC应用-翻页如何使用
MonoRail MVC应用-实体类和DataSet
MonoRail MVC应用-调试
后记
研究MonoRail目的，其实还想解决下面2问题:

Web项目的DLL的大。即使我们尽量分层，尽量使用WebControl，但实际开发中的确还是会有这个问题，Web的DLL大，上传的维护就很困难。如果是MVC，Web层就只有HTML代码了。
前后端人员的配合问题。从目前的感觉来说ASP这类动态语言，前后段的配合模式比目前的方式肯定要好。但对于程序员的开发来说，我可不愿意回到ASP年代。是否MVC的方式是平衡两者的改进呢?至少我觉的MVC这个V应该就是HTML了。


对于上面两点,MVC在.NET静态语言上的实现，还是无法改变需要编译的现实。也就是说一旦MVC中的C需要变化，或是提供新功能、特性。DLL还是要传。只能说MVC的方式可以改进我们的结构，但没办法根本解决一些问题。
文章我边整理边放到Blog，等所有文章内容写完，我会一并提供DEMO下载
参考：
MonoRail官方的DOC
firstyi的MonoRail

]]></description>
			<content:encoded><![CDATA[<div class="announcement_post"><h3>开始</h3>
<p>对于MVC的概念吵的火热,MS的MVC框架也是关注的热点。而在我的印象里，MVC应该和WINFORM编程相关，而且是通过事件机制来完成，特别是观察者模式的运用。后来查了查，发现JAVA社区很早就使用这方面的东西。因为NVelocity的原因，我接触MonoRail。本来是想解决应用系统模板化的问题，结果确杀出一个MonoRail。研究下来发现还是有实际意义，写了下面的一些内容。没有写关于MonoRail的分析、理论上的内容(这方面可以在文章最后的参考找到)，更多的是从实践应用的角度去看待MonoRail的使用。<br />
<span id="more-370"></span></p>
<h3>实践</h3>
<p><a href="http://www.pumaboyd.com/archives/372">MonoRail MVC应用-VM/HTML页面</a><br />
<a href="http://www.pumaboyd.com/archives/374">MonoRail MVC应用-构建多层结构的应用程序</a><br />
<a href="http://www.pumaboyd.com/archives/401">MonoRailMVC应用-母板页的Title</a><br />
<a href="http://www.pumaboyd.com/archives/426">MonoRailMVC应用-母板页的内容区域</a><br />
<a href="http://www.pumaboyd.com/archives/429">MonoRail MVC应用-FormHelper&#038;HtmlHelper</a><br />
<a href="http://www.pumaboyd.com/archives/452">MonRail MVC应用-HTML控件的使用</a><br />
<a href="http://www.pumaboyd.com/archives/454">MonoRail MVC应用-CRUD操作</a><br />
MonoRail MVC应用-页面格式化函数<br />
MonoRail MVC应用-页面数据传递<br />
MonoRail MVC应用-WebControl控件的使用<br />
MonoRail MVC应用-错误处理机制<br />
MonoRail MVC应用-翻页如何使用<br />
MonoRail MVC应用-实体类和DataSet<br />
MonoRail MVC应用-调试</p>
<h3>后记</h3>
<p>研究MonoRail目的，其实还想解决下面2问题:</p>
<ul>
<li>Web项目的DLL的大。即使我们尽量分层，尽量使用WebControl，但实际开发中的确还是会有这个问题，Web的DLL大，上传的维护就很困难。如果是MVC，Web层就只有HTML代码了。</li>
<li>前后端人员的配合问题。从目前的感觉来说ASP这类动态语言，前后段的配合模式比目前的方式肯定要好。但对于程序员的开发来说，我可不愿意回到ASP年代。是否MVC的方式是平衡两者的改进呢?至少我觉的MVC这个V应该就是HTML了。</li>
</ul>
<p><br/><br />
对于上面两点,MVC在.NET静态语言上的实现，还是无法改变需要编译的现实。也就是说一旦MVC中的C需要变化，或是提供新功能、特性。DLL还是要传。只能说MVC的方式可以改进我们的结构，但没办法根本解决一些问题。</p>
<p>文章我边整理边放到Blog，等所有文章内容写完，我会一并提供DEMO下载</p>
<p>参考：<br />
<a target="_blank" href="http://www.castleproject.org/monorail/documentation/index.html">MonoRail官方的DOC</a><br />
<a target="_blank" href=" http://www.cnblogs.com/firstyi/archive/2007/10/19/930691.html">firstyi的MonoRail</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/370/feed</wfw:commentRss>
		</item>
		<item>
		<title>MonoRail MVC应用-CRUD操作</title>
		<link>http://www.pumaboyd.com/archives/454</link>
		<comments>http://www.pumaboyd.com/archives/454#comments</comments>
		<pubDate>Tue, 06 Jan 2009 15:30:16 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[asp.net]]></category>

		<category><![CDATA[MonoRail]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=454</guid>
		<description><![CDATA[写任何形式的应用服务程序，都不免要讨论CRUD，而对CRUD的操作的快捷，我仍然认为WebForm是最好的形式。那么如何用MonoRail来实现一个新增、修改、删除的操作。
首先要说说MonoRail MVC官方的DOC中，推荐自己的Castle ActiveRecord。  这个通过NHibernate来实现的ORM框架。如果从理想状态来讲，所有的数据对象化，那使用将是非常方便的。但在真正的实际业务中，如果这样进行你会陷入泥潭。所以当我看过官方的DEMO后，还是决定按自己的思路，来作一些更有实践意义的探索。首先要碰到几个问题：


新增、修改同一页面
官方DEMO中，将新增、修改分成了两个VM。这带来的代价是一旦样式、结构修改，你将修改两遍。我还是提倡如果在业务形式上没有太大差别，尽量保持新增、修改在同一页面。可以减少很多重复代码。
页面没有ViewState
习惯了ViewState，一旦没有了很痛苦。当你Post以后页面的状态都没了。MonoRail MVC提供了智能绑定的功能，但实际用用，只能说好，但也不是很方便。所以目前没有好的办法，还是将Post过来的数据再一次赋值。
页面数据的传递
这个可能需要专门写一篇来介绍。我这里先提及。其实就MVC的方式来说，页面数据的提交、传递过程使用PHP\ASP没有什么区别了。通过Form将数据传递到指定的ACTION.同一Form的提交，可以通过判断Button来达到具体处理添加或删除或修改
这个问题可能很难通过这样说清楚，我粘贴一些代码，应该可以回答在使用MonoRailMVC 中进行CRUD操作碰到的问题(PS:代码演示，不用于调试)。
.VM代码

$Form.FormTag(&#34;%{action='createreview',id='form4'}&#34;)
&#160;
&#60;div&#62;
$error
&#60;/div&#62;
&#60;div&#62;
口味:
$Form.Select(&#34;kouwei&#34;,$kouweisource, &#34;%{value='key', text='value', firstoption='Please select'}&#34;)
人均:￥
$Form.TextFieldValue(&#34;txtAverage&#34;,$txtAverage,&#34;%{maxlength=4,size=6}&#34;)
&#60;/div&#62;
&#60;div&#62;
评价:&#60;span&#62;(50-2000个字符)&#60;/span&#62;&#60;br/&#62;
$Form.TextAreaValue(&#34;txtReview&#34;,$txtReview,&#34;%{rows=11,cols=94}&#34;)
&#60;/div&#62;
&#160;
&#60;div&#62;
喜爱程度:
#foreach($v in $multipleprimes)
   $Form.RadioField(&#34;mode&#34;, $v.key) $v.value
#end
&#60;/div&#62;
&#160;
&#60;div&#62; 喜欢的菜
#set($items = $Form.CreateCheckboxList(&#34;caixi&#34;,$caixisource,&#34;%{value='key'}&#34;))
#foreach($elem in $items)
  $items.Item()  $elem.value 
#end
&#60;/div&#62;
&#160;
&#60;div class=&#34;VoteBtn&#34;&#62;
	$Form.Submit(&#34;添加点评&#34;,&#34;%{name='btnadd'}&#34;)
	$Form.Submit(&#34;删除点评&#34;,&#34;%{name='btndel'}&#34;)
&#60;/div&#62;
$Form.HiddenField(&#34;hCount&#34;)
$Form.DisableValidation()
$Form.EndFormTag()

.CS代码

 &#91;Layout&#40;&#34;master&#34;&#41;&#93;
    public class ReviewController : BaseController
    &#123;
        public void Index&#40;&#41;
    [...]]]></description>
			<content:encoded><![CDATA[<p>写任何形式的应用服务程序，都不免要讨论CRUD，而对CRUD的操作的快捷，我仍然认为WebForm是最好的形式。那么如何用MonoRail来实现一个新增、修改、删除的操作。</p>
<p>首先要说说MonoRail MVC官方的DOC中，推荐自己的<a href="http://www.castleproject.org/activerecord/index.html">Castle ActiveRecord</a>。  这个通过NHibernate来实现的ORM框架。如果从理想状态来讲，所有的数据对象化，那使用将是非常方便的。但在真正的实际业务中，如果这样进行你会陷入泥潭。所以当我看过官方的DEMO后，还是决定按自己的思路，来作一些更有实践意义的探索。首先要碰到几个问题：<br />
<span id="more-454"></span></p>
<ul>
<li><strong>新增、修改同一页面</strong></li>
<p>官方DEMO中，将新增、修改分成了两个VM。这带来的代价是一旦样式、结构修改，你将修改两遍。我还是提倡如果在业务形式上没有太大差别，尽量保持新增、修改在同一页面。可以减少很多重复代码。</p>
<li><strong>页面没有ViewState</strong></li>
<p>习惯了ViewState，一旦没有了很痛苦。当你Post以后页面的状态都没了。MonoRail MVC提供了智能绑定的功能，但实际用用，只能说好，但也不是很方便。所以目前没有好的办法，还是将Post过来的数据再一次赋值。</p>
<li><strong>页面数据的传递</strong></li>
<p>这个可能需要专门写一篇来介绍。我这里先提及。其实就MVC的方式来说，页面数据的提交、传递过程使用PHP\ASP没有什么区别了。通过Form将数据传递到指定的ACTION.同一Form的提交，可以通过判断Button来达到具体处理添加或删除或修改</ul>
<p>这个问题可能很难通过这样说清楚，我粘贴一些代码，应该可以回答在使用MonoRailMVC 中进行CRUD操作碰到的问题(PS:代码演示，不用于调试)。</p>
<p>.VM代码</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;">$Form.FormTag(&quot;%{action='createreview',id='form4'}&quot;)
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
$error
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
口味:
$Form.Select(&quot;kouwei&quot;,$kouweisource, &quot;%{value='key', text='value', firstoption='Please select'}&quot;)
人均:￥
$Form.TextFieldValue(&quot;txtAverage&quot;,$txtAverage,&quot;%{maxlength=4,size=6}&quot;)
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
评价:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>(50-2000个字符)<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;br</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
$Form.TextAreaValue(&quot;txtReview&quot;,$txtReview,&quot;%{rows=11,cols=94}&quot;)
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
喜爱程度:
#foreach($v in $multipleprimes)
   $Form.RadioField(&quot;mode&quot;, $v.key) $v.value
#end
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 喜欢的菜
#set($items = $Form.CreateCheckboxList(&quot;caixi&quot;,$caixisource,&quot;%{value='key'}&quot;))
#foreach($elem in $items)
  $items.Item()  $elem.value 
#end
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;VoteBtn&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	$Form.Submit(&quot;添加点评&quot;,&quot;%{name='btnadd'}&quot;)
	$Form.Submit(&quot;删除点评&quot;,&quot;%{name='btndel'}&quot;)
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
$Form.HiddenField(&quot;hCount&quot;)
$Form.DisableValidation()
$Form.EndFormTag()</pre></div></div>

<p>.CS代码</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"> <span style="color: #000000;">&#91;</span>Layout<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;master&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> ReviewController <span style="color: #008000;">:</span> BaseController
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Index<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;today&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> DateTime.<span style="color: #0000FF;">Now</span>;
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;content&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;好吃好吃很好吃&quot;</span>;
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;username&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;pumaboyd&quot;</span>;
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;HeadTitle&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;×××的点评&quot;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span>
        <span style="color: #008080; font-style: italic;">/// 绑定控件列表的初始值</span>
        <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> BindPage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">//添加口味列表</span>
            ArrayList myAL <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ArrayList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;sss&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;ddd&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;3&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;aaa&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;4&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;kkk&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;5&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;ggg&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;kouweisource&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> myAL;
&nbsp;
            <span style="color: #008080; font-style: italic;">//添加喜欢程度的radio</span>
            ArrayList myAL1 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ArrayList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            myAL1.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;不喜欢&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL1.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;喜欢&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL1.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;3&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;很喜欢&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL1.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;4&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;无所谓&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;multipleprimes&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> myAL1;
&nbsp;
            <span style="color: #008080; font-style: italic;">//添加喜欢的菜系</span>
            ArrayList myAL2 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ArrayList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            myAL2.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;上海本帮&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL2.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;川菜&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL2.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;3&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;干菜&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            myAL2.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;4&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;天津&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;caixisource&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> myAL2;
&nbsp;
            <span style="color: #008080; font-style: italic;">//菜系的默认值</span>
            <span style="color: #008080; font-style: italic;">//ArrayList mck = new ArrayList();</span>
            <span style="color: #008080; font-style: italic;">//mck.Add(2);</span>
            <span style="color: #008080; font-style: italic;">//mck.Add(3);</span>
            <span style="color: #008080; font-style: italic;">//mck.Add(4);</span>
            <span style="color: #008080; font-style: italic;">//PropertyBag[&quot;caixi&quot;] = mck;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> AddReview<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            BindPage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> CreateReview<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>DataBind<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;caixi&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span> BoxItem<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> items<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            BindPage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #FF0000;">string</span> kouwei <span style="color: #008000;">=</span> Request.<span style="color: #0000FF;">Form</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;kouwei&quot;</span><span style="color: #000000;">&#93;</span>;
            <span style="color: #FF0000;">string</span> mode <span style="color: #008000;">=</span> Request.<span style="color: #0000FF;">Form</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;mode&quot;</span><span style="color: #000000;">&#93;</span>;
            <span style="color: #FF0000;">string</span> average <span style="color: #008000;">=</span> Request.<span style="color: #0000FF;">Form</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;txtAverage&quot;</span><span style="color: #000000;">&#93;</span>;
&nbsp;
            <span style="color: #008080; font-style: italic;">//希望程度</span>
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;mode&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> mode;
            <span style="color: #008080; font-style: italic;">//口味</span>
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;kouwei&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> kouwei;
            <span style="color: #008080; font-style: italic;">//菜系</span>
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;caixi&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> items;
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;txtAverage&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> average;
            PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;txtReview&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> Request.<span style="color: #0000FF;">Form</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;txtReview&quot;</span><span style="color: #000000;">&#93;</span>;
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #000000;">&#40;</span>average<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//提示错误</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span><span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #000000;">&#40;</span>Request.<span style="color: #0000FF;">Form</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;btnadd&quot;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    Flash<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;error&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;add提示错误&quot;</span>;
                <span style="color: #000000;">&#125;</span>
                <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span><span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #000000;">&#40;</span>Request.<span style="color: #0000FF;">Form</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;btndel&quot;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    Flash<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;error&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;del提示错误&quot;</span>;
                <span style="color: #000000;">&#125;</span>
                Flash<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;kouwei&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> kouwei;
                <span style="color: #008080; font-style: italic;">// RedirectToAction(&quot;AddReview&quot;);</span>
            <span style="color: #000000;">&#125;</span>
            RenderView<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;addreview&quot;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> UpdateReview<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
&nbsp;
    <span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/454/feed</wfw:commentRss>
		</item>
		<item>
		<title>MonRail MVC应用-HTML控件的使用</title>
		<link>http://www.pumaboyd.com/archives/452</link>
		<comments>http://www.pumaboyd.com/archives/452#comments</comments>
		<pubDate>Tue, 06 Jan 2009 15:02:33 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[asp.net]]></category>

		<category><![CDATA[MonoRail]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=452</guid>
		<description><![CDATA[前面介绍了通过Form和Html方法来输出控件。但这些控件都是没有数据绑定的，当我们需要一个有值控件时，如何使用？比较我们平时使用的webForm又有何不同。
用asp.net控件的名词来向大家介绍。TextBox、Lab这些都比较简单，我重点列举DropDownList控件、RadioList控件、CheckBoxList控件的使用

DropDownList(下拉列表控件)
.VM代码

口味:
$Form.Select(&#34;kouwei&#34;,$kouweisource, &#34;%{value='key', text='value', firstoption='Please select'}&#34;)

.CS代码

//添加口味列表数据
ArrayList myAL = new ArrayList&#40;&#41;;
myAL.Add&#40;new &#123; key= &#34;1&#34; ,value = &#34;sss&#34; &#125;&#41;;
myAL.Add&#40;new &#123; key = &#34;2&#34;, value = &#34;ddd&#34; &#125;&#41;;
myAL.Add&#40;new &#123; key = &#34;3&#34;, value = &#34;aaa&#34; &#125;&#41;;
myAL.Add&#40;new &#123; key = &#34;4&#34;, value = &#34;kkk&#34; &#125;&#41;;
myAL.Add&#40;new &#123; key = &#34;5&#34;, value = &#34;ggg&#34; &#125;&#41;;
PropertyBag&#91;&#34;kouweisource&#34;&#93; = myAL;
//口味列表的默认选择项
PropertyBag&#91;&#34;kouwei&#34;&#93; = 1;

有些不习惯的是没有DataSet绑定。绑定的方式有很多中，比如官方DEMO的数组实现，而在实际使用中一般数据是从数据库读取的，返回List集合肯定是最方便的。请特别注意一下设置默认选项的方式。
RadioList（单选列表控件）
.VM代码

喜爱程度:
#foreach($v in $multipleprimes)
  [...]]]></description>
			<content:encoded><![CDATA[<p>前面介绍了<a href="http://www.pumaboyd.com/archives/429">通过Form和Html方法来输出控件</a>。但这些控件都是没有数据绑定的，当我们需要一个有值控件时，如何使用？比较我们平时使用的webForm又有何不同。<br />
用asp.net控件的名词来向大家介绍。TextBox、Lab这些都比较简单，我重点列举DropDownList控件、RadioList控件、CheckBoxList控件的使用<br />
<span id="more-452"></span><br />
<strong>DropDownList(下拉列表控件)</strong><br />
.VM代码</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;">口味:
$Form.Select(&quot;kouwei&quot;,$kouweisource, &quot;%{value='key', text='value', firstoption='Please select'}&quot;)</pre></div></div>

<p>.CS代码</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//添加口味列表数据</span>
ArrayList myAL <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ArrayList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key<span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1&quot;</span> ,value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;sss&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;ddd&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;3&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;aaa&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;4&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;kkk&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;5&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;ggg&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;kouweisource&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> myAL;
<span style="color: #008080; font-style: italic;">//口味列表的默认选择项</span>
PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;kouwei&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span>;</pre></div></div>

<p>有些不习惯的是没有DataSet绑定。绑定的方式有很多中，比如官方DEMO的数组实现，而在实际使用中一般数据是从数据库读取的，返回List集合肯定是最方便的。请特别注意一下设置默认选项的方式。</p>
<p><strong>RadioList（单选列表控件）</strong><br />
.VM代码</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;">喜爱程度:
#foreach($v in $multipleprimes)
  $Form.RadioField(&quot;mode&quot;, $v.key) $v.value
#end</pre></div></div>

<p>.CS代码</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//添加喜欢程度的radio</span>
ArrayList myAL1 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ArrayList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
myAL1.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key<span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1&quot;</span> ,value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;不喜欢&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL1.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;喜欢&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL1.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;3&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;很喜欢&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL1.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;4&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;无所谓&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;multipleprimes&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> myAL1;
<span style="color: #008080; font-style: italic;">//默认选中值</span>
PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;mode&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span>;</pre></div></div>

<p>和DropDownList没有什么大的区别，只是在.VM中需要使用foreach去构建label</p>
<p><strong>CheckBoxList（多选列表控件）</strong><br />
.VM代码</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;">喜欢的菜
#set($items = $Form.CreateCheckboxList(&quot;caixi&quot;,$caixisource,&quot;%{value='key'}&quot;))
#foreach($elem in $items)
 $items.Item()  $elem.value
#end</pre></div></div>

<p>.CS代码</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//添加喜欢的菜系</span>
ArrayList myAL2 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ArrayList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
myAL2.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;上海本帮&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL2.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;川菜&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL2.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;3&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;干菜&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
myAL2.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">&#123;</span> key <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;4&quot;</span>, value <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;天津&quot;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;caixisource&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> myAL2;
<span style="color: #008080; font-style: italic;">//菜系的默认值</span>
ArrayList mck <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ArrayList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
mck.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">2</span><span style="color: #000000;">&#41;</span>;
mck.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">3</span><span style="color: #000000;">&#41;</span>;
mck.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">4</span><span style="color: #000000;">&#41;</span>;
PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;caixi&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> mck;</pre></div></div>

<p>CheckBoxList的这些操作也没有什么特别。特别的地方是获取CheckBoxList所有勾选中的选项。对于这个难题我也折腾了半天。最后还是想到了一个比较通用的方法：</p>
<ul>
<ol>
将当前Control继承成SmartDispatcherController(智能绑定控件)</ol>
<ol>
定义一个类（这个类最好定义在通用层中，会经常用到）</ol>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> BoxItem
<span style="color: #000000;">&#123;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Key <span style="color: #000000;">&#123;</span> get; set; <span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Value <span style="color: #000000;">&#123;</span> get; set; <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<ol>
在相应的Action中添加参数，就可以获取多选的值了</ol>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"> <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> CreateReview<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>DataBind<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;caixi&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span> BoxItem<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> items<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">//items中每一项Key对应的值就是多选项</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

</ul>
<p>最后在强调一下:MonoRail MVC 在控件的数据绑定上有很多的灵活性。绑定的方式也很多样。<a href="http://www.castleproject.org/monorail/documentation/v1rc2/helpers/form/index.html">官方DEMO</a>，而这里列举的是我认为的最佳实践。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/452/feed</wfw:commentRss>
		</item>
		<item>
		<title>孤独的小镇</title>
		<link>http://www.pumaboyd.com/archives/447</link>
		<comments>http://www.pumaboyd.com/archives/447#comments</comments>
		<pubDate>Mon, 29 Dec 2008 13:50:41 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[LifeStyle]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=447</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;这两天都在寺庙里居住。庙宇不大，因为正好农历初一，和母亲来的。小庙少了大庙的热闹。偶有人来，但也多了一份特有的宁静。庙里的三只猫和小狗增添了不少生气。晚上和大和尚喝了一晚的茶。从铁观音、普洱到大红袍。平时不大爱喝茶，也不懂的喝茶。反正最喜欢喝铁观音，师傅说大红袍是最好的。而茶饼，说实话不知道还以为是晒干的牛粪。
&#160;&#160;&#160;&#160;回老家并没有感觉轻松，回来找朋友看了下身体状况。朋友的回答让人放心不少，但身体不适也不知道为何。还是让朋友开了药，坚持吃吧！血压到是正常，真不知道上次怎么量出个高学压。身体健康就是福气了。

&#160;&#160;&#160;&#160;母亲又年轻一岁了，身体比前几年好多了，在外的我们也就放心不少。其实我总在想，母亲到底是希望我们出来呢,还是在家呆着。一年也回不去几次家，母亲又不习惯上海生活。哎，独生子女在外工作&#8230;&#8230;
&#160;&#160;&#160;&#160;小城镇两年来也没有什么变化，只是大街上认识的熟人越来越少了。对于家乡，不知道该怎么说，也许是因为还年轻吧。暂时没有乡愁，或者是因为已经习惯了在外面的生活。这个小镇越来越感到孤独，因为人少了，因为时间久了，因为已经在外生活了。
宁静的小庙

可爱的土狗

文峰塔

过年的气氛

更多小镇图片
]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;这两天都在寺庙里居住。庙宇不大，因为正好农历初一，和母亲来的。小庙少了大庙的热闹。偶有人来，但也多了一份特有的宁静。庙里的三只猫和小狗增添了不少生气。晚上和大和尚喝了一晚的茶。从铁观音、普洱到大红袍。平时不大爱喝茶，也不懂的喝茶。反正最喜欢喝铁观音，师傅说大红袍是最好的。而茶饼，说实话不知道还以为是晒干的牛粪。<br />
&nbsp;&nbsp;&nbsp;&nbsp;回老家并没有感觉轻松，回来找朋友看了下身体状况。朋友的回答让人放心不少，但身体不适也不知道为何。还是让朋友开了药，坚持吃吧！血压到是正常，真不知道上次怎么量出个高学压。身体健康就是福气了。<br />
<span id="more-447"></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;母亲又年轻一岁了，身体比前几年好多了，在外的我们也就放心不少。其实我总在想，母亲到底是希望我们出来呢,还是在家呆着。一年也回不去几次家，母亲又不习惯上海生活。哎，独生子女在外工作&#8230;&#8230;<br />
&nbsp;&nbsp;&nbsp;&nbsp;小城镇两年来也没有什么变化，只是大街上认识的熟人越来越少了。对于家乡，不知道该怎么说，也许是因为还年轻吧。暂时没有乡愁，或者是因为已经习惯了在外面的生活。这个小镇越来越感到孤独，因为人少了，因为时间久了，因为已经在外生活了。</p>
<p>宁静的小庙<br />
<a href="http://www.yupoo.com/photos/view?id=ff8080811e71dccb011e814544bc12ef" title="来YUPOO看我的照片"><img src="http://pic.yupoo.com/pumaboyd/702986bbd9a6/medium.jpg" alt="IMAG0146" width="500" height="375" border="0" /></a></p>
<p>可爱的土狗<br />
<a href="http://www.yupoo.com/photos/view?id=ff8080811e71dccb011e814546a212f3" title="来YUPOO看我的照片"><img src="http://pic.yupoo.com/pumaboyd/031536bbd9a7/medium.jpg" alt="IMAG0151" width="500" height="375" border="0" /></a></p>
<p>文峰塔<br />
<a href="http://www.yupoo.com/photos/view?id=ff8080811e7ddb3d011e815008773986" title="来YUPOO看我的照片"><img src="http://pic.yupoo.com/pumaboyd/129976bbdc68/medium.jpg" alt="IMAG0154" width="500" height="375" border="0" /></a></p>
<p>过年的气氛<br />
<a href="http://www.yupoo.com/photos/view?id=ff8080811e7ddb3d011e815704143a1b" title="来YUPOO看我的照片"><img src="http://pic.yupoo.com/pumaboyd/988446bbde32/medium.jpg" alt="IMAG0160" width="500" height="375" border="0" /></a></p>
<p><a href="http://pumaboyd.yupoo.com/photos/tags/?tag=%E5%B0%8F%E5%9F%8E%E6%95%85%E4%BA%8B">更多小镇图片</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/447/feed</wfw:commentRss>
		</item>
		<item>
		<title>回老家,元旦后回！</title>
		<link>http://www.pumaboyd.com/archives/435</link>
		<comments>http://www.pumaboyd.com/archives/435#comments</comments>
		<pubDate>Thu, 25 Dec 2008 16:23:18 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[LifeStyle]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=435</guid>
		<description><![CDATA[写完2篇Blog又是凌晨了！明天，应该说今天了，晚上就乘火车回老家了！回上海已是2009年了！
Blog可能会更新的慢一点，也或者会更频繁。MonoRail MVC系列我还在继续，只是回老家了，没编译器，还请大家耐心等待。
]]></description>
			<content:encoded><![CDATA[<p>写完2篇Blog又是凌晨了！明天，应该说今天了，晚上就乘火车回老家了！回上海已是2009年了！<br />
Blog可能会更新的慢一点，也或者会更频繁。MonoRail MVC系列我还在继续，只是回老家了，没编译器，还请大家耐心等待。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/435/feed</wfw:commentRss>
		</item>
		<item>
		<title>MonoRail MVC应用-FormHelper&#038;HtmlHelper</title>
		<link>http://www.pumaboyd.com/archives/429</link>
		<comments>http://www.pumaboyd.com/archives/429#comments</comments>
		<pubDate>Thu, 25 Dec 2008 16:12:31 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[asp.net]]></category>

		<category><![CDATA[MonoRail]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=429</guid>
		<description><![CDATA[通过对MonoRail母板页(1)(2)的介绍，整个Web站点的页面结构(页头、页尾、内容)都已经分清楚了。接下来就是将前端开发人员提供的HTML代码，如何转变为MVC中的V了。(演示代码，不做具体调试)
前端提供的HTML

&#60;a href=&#34;/shop/shopinfo.rails&#34;&#62;商户信息&#60;/a&#62;
&#60;form action=&#34;addreview&#34;&#62;
&#60;h2&#62;添加点评&#60;/h2&#62;
&#60;div&#62;
口味
&#60;select&#62;
	&#60;option value=&#34;0&#34;&#62;差(0)&#60;/option&#62;
	&#60;option value=&#34;1&#34;&#62;一般(1)&#60;/option&#62;
	&#60;option value=&#34;2&#34;&#62;好(2)&#60;/option&#62;
	&#60;option value=&#34;3&#34;&#62;很好(3)&#60;/option&#62;
	&#60;option value=&#34;4&#34;&#62;非常好(4)&#60;/option&#62;
&#60;/select&#62;
&#160;
评价:&#60;span class=&#34;nf&#34;&#62;50字以上&#60;/span&#62;
&#60;textarea rows=&#34;3&#34; name=&#34;review&#34;&#62;&#60;/textarea&#62;&#60;/div&#62;
&#60;input name=&#34;btnReview&#34; type=&#34;submit&#34; value=&#34;提交点评&#34; /&#62;
&#60;/form&#62;


MonoRail MVC的模板页

$Html.LinkTo(&#34;商户信息&#34;,&#34;shop&#34;,&#34;shopinfo.rails&#34;)
$Form.FormTag(&#34;addreview&#34;)
&#60;h2&#62;添加点评&#60;/h2&#62;
&#60;div&#62;
口味
$Form.Select(&#34;kouwei&#34;,$kouweisource)
&#160;
评价:&#60;span class=&#34;nf&#34;&#62;50字以上&#60;/span&#62;
$Form.TextArea(&#34;review&#34;,&#34;%{rows=3,name='review'}&#34;&#60;/div&#62;
$Form.Submit(&#34;提交点评&#34;)
$Form.EndFormTag()

从模板页中，我们可以看到两个关键的方法FormHelper&#38;HtmlHelper。（PS:FormHelper、HtmlHelper已经和官方确认，其the same Form&#38;Html。所以我代码中都使用了简写方式，实践一下你就知道为什么我这么写)。那么接下来你的重要内容，就是讲HTML翻译成VM了。其实如果有专门的前端人员，完全可以由前端完成。具体$Form $Html如何使用，我会专门介绍。
$Html.CreateOption
$Html.FieldSet
$Html.Form
$Html.InputText
$Html.Select
$Html.SubmitButton
$Html.InputCheckbox
&#8230;&#8230;.
$Form.Select
$Form.Submit
$Form.TextField
$Form.TextArea
$Form.PasswordField
$Form.CreateCheckboxList
&#8230;&#8230;.
大概就列这几个具体大家可以看官方文档。主要是为了说明两者在拼接HTML代码上的区别

$Html 直接封装了对HTML标签的拼写简化，方便拼接
$Form 同样封装了HTML标签的拼写简化，但增加了智能绑定的功能（这里还有验证的功能，目前偶还没尝试）

所以我目前用下来的感觉是如果是直接的页面渲染，$Html的输出是一个不错的选择，但如果是在使用$Form做一些CRUD的操作，更加方便。(*^__^*) 其实Form本来就是用来提交的吗！
]]></description>
			<content:encoded><![CDATA[<p>通过对MonoRail母板页(<a href="http://www.pumaboyd.com/archives/401">1</a>)(<a href="http://www.pumaboyd.com/archives/426">2</a>)的介绍，整个Web站点的页面结构(页头、页尾、内容)都已经分清楚了。接下来就是将前端开发人员提供的HTML代码，如何转变为MVC中的V了。(演示代码，不做具体调试)<br />
<strong>前端提供的HTML</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;/shop/shopinfo.rails&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>商户信息<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;form</span> <span style="color: #000066;">action</span>=<span style="color: #ff0000;">&quot;addreview&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h2<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>添加点评<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h2<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
口味
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;select<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;option</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>差(0)<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/option<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;option</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>一般(1)<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/option<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;option</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>好(2)<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/option<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;option</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>很好(3)<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/option<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;option</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;4&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>非常好(4)<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/option<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/select<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
评价:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;span</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;nf&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>50字以上<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;textarea</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;3&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;review&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/textarea<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;btnReview&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;提交点评&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/form<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><span id="more-429"></span><br />
<strong>MonoRail MVC的模板页</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;">$Html.LinkTo(&quot;商户信息&quot;,&quot;shop&quot;,&quot;shopinfo.rails&quot;)
$Form.FormTag(&quot;addreview&quot;)
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h2<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>添加点评<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h2<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
口味
$Form.Select(&quot;kouwei&quot;,$kouweisource)
&nbsp;
评价:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;span</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;nf&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>50字以上<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
$Form.TextArea(&quot;review&quot;,&quot;%{rows=3,name='review'}&quot;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
$Form.Submit(&quot;提交点评&quot;)
$Form.EndFormTag()</pre></div></div>

<p>从模板页中，我们可以看到两个关键的方法FormHelper&amp;HtmlHelper。（PS:FormHelper、HtmlHelper已经和官方确认，其the same Form&amp;Html。所以我代码中都使用了简写方式，实践一下你就知道为什么我这么写)。那么接下来你的重要内容，就是讲HTML翻译成VM了。其实如果有专门的前端人员，完全可以由前端完成。具体$Form $Html如何使用，我会专门介绍。</p>
<blockquote><p>$Html.CreateOption<br />
$Html.FieldSet<br />
$Html.Form<br />
$Html.InputText<br />
$Html.Select<br />
$Html.SubmitButton<br />
$Html.InputCheckbox<br />
&#8230;&#8230;.<br />
$Form.Select<br />
$Form.Submit<br />
$Form.TextField<br />
$Form.TextArea<br />
$Form.PasswordField<br />
$Form.CreateCheckboxList<br />
&#8230;&#8230;.</p></blockquote>
<p>大概就列这几个具体大家可以看官方文档。主要是为了说明两者在拼接HTML代码上的区别</p>
<ul>
<li>$Html 直接封装了对HTML标签的拼写简化，方便拼接</li>
<li>$Form 同样封装了HTML标签的拼写简化，但增加了智能绑定的功能（这里还有验证的功能，目前偶还没尝试）</li>
</ul>
<p>所以我目前用下来的感觉是如果是直接的页面渲染，$Html的输出是一个不错的选择，但如果是在使用$Form做一些CRUD的操作，更加方便。(*^__^*) 其实Form本来就是用来提交的吗！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/429/feed</wfw:commentRss>
		</item>
		<item>
		<title>MonoRailMVC应用-母板页的内容区域</title>
		<link>http://www.pumaboyd.com/archives/426</link>
		<comments>http://www.pumaboyd.com/archives/426#comments</comments>
		<pubDate>Thu, 25 Dec 2008 15:12:34 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[asp.net]]></category>

		<category><![CDATA[MonoRail]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=426</guid>
		<description><![CDATA[在MonoRailMVC应用-母板页的Title中，已经接触了通过定义一个$!headtitle的方式来实现内容页向母板也添加代码。这种方式有其方便性，特别是在CS后代码输出控制。但这样做有时反而不优雅。比如:javascript、CSS文件的控制。
加载CSS、JS就好的方式就是通过CaptureFor来实现。用过ASP.NET的都知道母板页中可以定义placehold（内容区域），方便内容页替换母板页中的内容。MonoRail MVC 通过CaptureFor来实现这个功能。
母板页VM添加如下代码:


   $!javascriptcontent1

内容页的VM添加如下代码:

#capturefor(javascriptcontent1)
&#60;script type=&#34;javascript&#34;&#62;
javascript code here
&#60;/script&#62;
&#160;
#end

功能很方便。通过定义$!csscontent变量就可以实现CSS的替换。这样就为每一个page有自己独立css、js提供了最佳方式。
]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://www.pumaboyd.com/archives/401">MonoRailMVC应用-母板页的Title</a>中，已经接触了通过定义一个$!headtitle的方式来实现内容页向母板也添加代码。这种方式有其方便性，特别是在CS后代码输出控制。但这样做有时反而不优雅。比如:javascript、CSS文件的控制。<br />
加载CSS、JS就好的方式就是通过CaptureFor来实现。用过ASP.NET的都知道母板页中可以定义placehold（内容区域），方便内容页替换母板页中的内容。MonoRail MVC 通过CaptureFor来实现这个功能。<br />
母板页VM添加如下代码:<br />
<span id="more-426"></span></p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;">   $!javascriptcontent1</pre></div></div>

<p>内容页的VM添加如下代码:</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;">#capturefor(javascriptcontent1)
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;javascript&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
javascript code here
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
#end</pre></div></div>

<p>功能很方便。通过定义$!csscontent变量就可以实现CSS的替换。这样就为每一个page有自己独立css、js提供了最佳方式。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/426/feed</wfw:commentRss>
		</item>
		<item>
		<title>MonoRailMVC应用-母板页的Title</title>
		<link>http://www.pumaboyd.com/archives/401</link>
		<comments>http://www.pumaboyd.com/archives/401#comments</comments>
		<pubDate>Sun, 21 Dec 2008 14:13:49 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=401</guid>
		<description><![CDATA[母板页是具体设计网站首先要面对的问题。MonoRail默认在Views/layouts目录中。因为我配置过目录，所以我的目录是在wap3/layouts下。接下来我沿用ASP.NET对母板页的一些说法来表述，方便大家更快的理解和使用
内容页中设置母板页的Title、Metal信息
因为MonoRail的layouts是没有后代码的(重点说明)，那么有些需要在母板页处理的逻辑怎么使用呢？其实很简单只要在母板页上定义一个变量，内容页进行赋值即可
母板页添加如下代码：


 &#60;title&#62;$headtitle &#60;/title&#62;

内容页CS代码进行赋值

public void Index&#40;&#41;
&#123;
   PropertyBag&#91;&#34;HeadTitle&#34;&#93; = &#34;首页数据&#34;;
&#125;

这样就完成了在内容页中修改母板页内容的过程。
母板页的默认值
但这样你会发现一个，就是每一个调用母板页的地方都必须去设置这个headtitle，否则他直接输出$headtitle。显然需要一个默认值。每一个页面去设置默认值，加重了开发的负担。这样我就定义了一个BaseController类
public class BaseController : Controller
   {
       public BaseController()
       {
           PropertyBag["HeadTitle"] = String.Empty;
       }
   }
让所有的内容页后代码都从BaseController继承，这样就解决的默认值的问题
空默认值更简单
你如果认为新定义一个基类比较麻烦，而你的值默认是为空的，那么这样使用更加方便。如果没有赋值，在内容页中将不显示

 [...]]]></description>
			<content:encoded><![CDATA[<p>母板页是具体设计网站首先要面对的问题。MonoRail默认在Views/layouts目录中。因为我配置过目录，所以我的目录是在wap3/layouts下。接下来我沿用ASP.NET对母板页的一些说法来表述，方便大家更快的理解和使用<br />
<strong>内容页中设置母板页的Title、Metal信息</strong><br />
因为MonoRail的layouts是没有后代码的(重点说明)，那么有些需要在母板页处理的逻辑怎么使用呢？其实很简单只要在母板页上定义一个变量，内容页进行赋值即可<br />
母板页添加如下代码：<br />
<span id="more-401"></span></p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"> &lt;title&gt;$headtitle &lt;/title&gt;</pre></div></div>

<p>内容页CS代码进行赋值</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Index<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   PropertyBag<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;HeadTitle&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;首页数据&quot;</span>;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>这样就完成了在内容页中修改母板页内容的过程。<br />
<strong>母板页的默认值</strong><br />
但这样你会发现一个，就是每一个调用母板页的地方都必须去设置这个headtitle，否则他直接输出$headtitle。显然需要一个默认值。每一个页面去设置默认值，加重了开发的负担。这样我就定义了一个BaseController类<br />
public class BaseController : Controller<br />
   {<br />
       public BaseController()<br />
       {<br />
           PropertyBag["HeadTitle"] = String.Empty;<br />
       }<br />
   }</p>
<p>让所有的内容页后代码都从BaseController继承，这样就解决的默认值的问题<br />
<strong>空默认值更简单</strong><br />
你如果认为新定义一个基类比较麻烦，而你的值默认是为空的，那么这样使用更加方便。如果没有赋值，在内容页中将不显示</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"> &lt;title&gt;$!headtitle &lt;/title&gt;</pre></div></div>

<p>但如果你需要一些定制化的默认值，这样就比较麻烦了。所以我还是建议都从BaseController继承。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/401/feed</wfw:commentRss>
		</item>
		<item>
		<title>HowTo:C#性能测试扩展函数</title>
		<link>http://www.pumaboyd.com/archives/399</link>
		<comments>http://www.pumaboyd.com/archives/399#comments</comments>
		<pubDate>Sun, 21 Dec 2008 13:45:44 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[asp.net]]></category>

		<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=399</guid>
		<description><![CDATA[看了ark的文章让我想起了些这个。可能没有太多的实际意义，但确是一个不错的思路。
我们平时在使用stopwatch统计时间的时候一般会这样使用。

Stopwatch watch = Stopwatch.StartNew&#40;&#41;;
for &#40;int i = 0; i &#60; runs; i++&#41;
&#123;
.......
&#125;
watch.Stop&#40;&#41;;


这样就可以统计到运行的时间，但用过Python的人都知道，python自备电池。那么其实用扩展函数就可以实现这个类似功能（PS:其实功能还是相差蛮大的，但皮已经画的很像了）。
先演示如何使用(统计A.Run这个方法运行100次的使用时间)

class Program
    &#123;
        static void Main&#40;string&#91;&#93; args&#41;
        &#123;
            A a = new A&#40;&#41;;
    [...]]]></description>
			<content:encoded><![CDATA[<p>看了ark的文章让我想起了些这个。可能没有太多的实际意义，但确是一个不错的思路。<br />
我们平时在使用stopwatch统计时间的时候一般会这样使用。</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;">Stopwatch watch <span style="color: #008000;">=</span> Stopwatch.<span style="color: #0000FF;">StartNew</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> 0; i <span style="color: #008000;">&lt;</span> runs; i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
.......
<span style="color: #000000;">&#125;</span>
watch.<span style="color: #0000FF;">Stop</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p><span id="more-399"></span><br />
这样就可以统计到运行的时间，但用过Python的人都知道，<a href="http://www.pumaboyd.com/archives/396">python自备电池</a>。那么其实用扩展函数就可以实现这个类似功能（PS:其实功能还是相差蛮大的，但皮已经画的很像了）。<br />
先演示如何使用(统计A.Run这个方法运行100次的使用时间)</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> Program
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            A a <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> A<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            Action act <span style="color: #008000;">=</span> a.<span style="color: #0000FF;">Run</span>;
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>act.<span style="color: #0000FF;">Profile</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">100</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
            Console.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> A
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Run<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span>0; i <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">100000</span>; i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span> ;
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>用扩展方法来实现这个需求,这样就不用重复写stopwatch了</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">class</span> FunctionHelper
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">string</span> Profile<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span> Action func, <span style="color: #FF0000;">int</span> runs<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
&nbsp;
            Stopwatch watch <span style="color: #008000;">=</span> Stopwatch.<span style="color: #0000FF;">StartNew</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> 0; i <span style="color: #008000;">&lt;</span> runs; i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                func<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
            watch.<span style="color: #0000FF;">Stop</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #FF0000;">float</span> sec <span style="color: #008000;">=</span> watch.<span style="color: #0000FF;">ElapsedMilliseconds</span> <span style="color: #008000;">/</span> 1000.0f;
            <span style="color: #FF0000;">float</span> freq <span style="color: #008000;">=</span> runs <span style="color: #008000;">/</span> sec;
&nbsp;
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;execute runs:{0};sec:{1};freq&quot;</span>,
                                runs,  <span style="color: #008080; font-style: italic;">//运行次数 </span>
                                sec,   <span style="color: #008080; font-style: italic;">// 运行时间</span>
                                freq <span style="color: #008080; font-style: italic;">// 平均运行时间</span>
                                <span style="color: #000000;">&#41;</span>;
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>有了这个扩展方法，你就可以对某些特定的方法自动调用性能函数了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/399/feed</wfw:commentRss>
		</item>
		<item>
		<title>Python性能测试工具</title>
		<link>http://www.pumaboyd.com/archives/396</link>
		<comments>http://www.pumaboyd.com/archives/396#comments</comments>
		<pubDate>Sun, 21 Dec 2008 13:11:27 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
		
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=396</guid>
		<description><![CDATA[有段时间没写Python了，业余时间都研究.NET和帮朋友处理一些问题。就这样Python将近两个月没碰了。(*^__^*)，这篇文章也是为.NET而写的，作个内链。顺便记录一下。
Python 社区有句俗语：“Python 自己带着电池。” 别自己写计时框架。Python 2.3以后 、具备一个叫做 timeit 的完美计时工具。DiveInto中的例子


&#62;&#62;&#62; import timeit
&#62;&#62;&#62; t = timeit.Timer&#40;&#34;soundex.soundex('Pilgrim')&#34;,
...     &#34;import soundex&#34;&#41;   
&#62;&#62;&#62; t.timeit&#40;&#41;              
8.21683733547
&#62;&#62;&#62; t.repeat&#40;3, 2000000&#41;    
&#91;16.48319309109, 16.46128984923, 16.44203948912&#93;

这个方法有局限性，有时候我只是要统计方法中某一段的计时。这个时候用time.clock会更加方便。类似.NET中的stopwatch

import time
n = 100000
st = time.clock&#40;&#41;
v = &#40;'abcd',100,1.0, &#91;'pumaboyd',100,None&#93;&#41;
for i in [...]]]></description>
			<content:encoded><![CDATA[<p>有段时间没写Python了，业余时间都研究.NET和帮朋友处理一些问题。就这样Python将近两个月没碰了。(*^__^*)，这篇文章也是为.NET而写的，作个内链。顺便记录一下。<br />
Python 社区有句俗语：“Python 自己带着电池。” 别自己写计时框架。Python 2.3以后 、具备一个叫做 timeit 的完美计时工具。DiveInto中的例子<br />
<span id="more-396"></span></p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">timeit</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> t = <span style="color: #dc143c;">timeit</span>.<span style="color: black;">Timer</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;soundex.soundex('Pilgrim')&quot;</span>,
...     <span style="color: #483d8b;">&quot;import soundex&quot;</span><span style="color: black;">&#41;</span>   
<span style="color: #66cc66;">&gt;&gt;&gt;</span> t.<span style="color: #dc143c;">timeit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>              
<span style="color: #ff4500;">8.21683733547</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> t.<span style="color: black;">repeat</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span>, <span style="color: #ff4500;">2000000</span><span style="color: black;">&#41;</span>    
<span style="color: black;">&#91;</span><span style="color: #ff4500;">16.48319309109</span>, <span style="color: #ff4500;">16.46128984923</span>, <span style="color: #ff4500;">16.44203948912</span><span style="color: black;">&#93;</span></pre></div></div>

<p>这个方法有局限性，有时候我只是要统计方法中某一段的计时。这个时候用time.clock会更加方便。类似.NET中的stopwatch</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
n = <span style="color: #ff4500;">100000</span>
st = <span style="color: #dc143c;">time</span>.<span style="color: black;">clock</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
v = <span style="color: black;">&#40;</span><span style="color: #483d8b;">'abcd'</span>,<span style="color: #ff4500;">100</span>,<span style="color: #ff4500;">1.0</span>, <span style="color: black;">&#91;</span><span style="color: #483d8b;">'pumaboyd'</span>,<span style="color: #ff4500;">100</span>,<span style="color: #008000;">None</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">xrange</span><span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">exec</span><span style="color: black;">&#40;</span>dumps<span style="color: black;">&#40;</span>v<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'pickle usage'</span>, <span style="color: #dc143c;">time</span>.<span style="color: black;">clock</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> - st</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/396/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
