词条统计
浏览次数:7382 次
编辑次数:3次 历史版本
最近更新:2013/6/20
创建者:掷鸡蛋者

第一部分:概念

wojilu 模板引擎的设计理念是简单易用,不带脚本语言的特征。在大多数时候,工作良好。
但在少数时候,比如下拉列表中,简单的模板引擎语法就显得无能为力。

正确的做法是,把下拉框的实现看做是视图逻辑,挪到控制器中。正如我们前面做过的:

您也可以这样理解:下拉框是数据的集合,并且包括了当前选项是哪一个这样的信息,所以我们需要将其看做是带着视图逻辑的一个集合。

把这些带着视图逻辑的数据集合起来,最终呈现为页面的html,我们称之为“html控件”。
当然,它和 webform 中的控件是有区别的,不带事件,要轻量级很多。

下拉列表的语法是:
dropList( "控件名称", 数据集合, "名称=值", 选定的值 )
当然,你在视图模板中还要定义一个下拉列表的变量,便于服务端控件的填充:
#{控件名称}

a)控制器:所以上面的 dropList( "categoryId", Category.findAll(), "Name=Id", 0 ) 就表示:
用 Category.findAll() 的结果作为数据集合填充到下拉列表中,下拉列表各项显示的是数据的Name,值是数据的Id,当前选定的是0
b)视图:同时,记得在视图模板中下拉框的地方写上:#{categoryId}
c)服务器获取提交的值:
因为这个下拉框的名称是 "categoryId",所以服务器端获取这个下拉框的值就是:
ctx.PostInt( "categoryId" );

除了上面所示用对象列表填充下拉框,从框架1.5开始,还可以使用数组和 Dictionary 作为下拉选项。

1)使用数组作为下拉选项

string[] options = { "A", "B", "O", "AB" };

dropList( "blood", options, "B" );


2)使用 Dictionary 作为下拉选项

Dictionary<string, string> options = new Dictionary<string, string>();

options.Add( "一年级", "1" );

options.Add( "二年级", "2" );

options.Add( "三年级", "3" );

options.Add( "四年级", "4" );

options.Add( "五年级", "5" );

dropList( "grade", options, "3" );

第二部分:内置的4个控件

目前 wojilu MVC framework 中自带了3个常用控件:

dropList(也可以通过完整名称 Html.DropList 调用) 是下拉列表(语法见上)
checkboxList(也可以通过完整名称 Html.CheckBoxList调用) 是多选列表(用法同dropList)
radioList(也可以通过完整名称 Html.RadioList调用) 是单选列表(用法同dropList)

另外还有一个富文本编辑器,也可以算作控件吧:

第三部分:自定义控件

因为控件只是数据和视图逻辑的简单封装,所以任何返回html字符串的对象都可以算作我们这里的控件。太简单了,您可以随便写。

第四部分:自定义外观样式

每一个控件生成的html代码中,都自带一个id属性,比如生成如下html代码
<select name="book" id="book"><option value="" selected>请选择</option><option value="1" >小说</option><option value="2" >诗歌</option><option value="3" >散文</option><option value="4" >戏剧</option></select>

此时,你可以在视图中加上css控制外观样式
<style>#book {width:300px;}</style>
<select name="book" id="book"><option value="" selected>请选择</option><option value="1" >小说</option><option value="2" >诗歌</option><option value="3" >散文</option><option value="4" >戏剧</option></select> 

也就是说,你只要在控件前面插入一行css代码即可。注意,绿色部分是最终生成的html代码,在视图中,实际的代码大概这样:
<style>#book {width:300px;}</style>
#{dropBook}  

第五部分:使用控件的原则

html控件的使用,只是为了简化视图逻辑的编写,并不是要代替视图内容。过度入侵视图模板,会给界面修改带来不必要的麻烦。

所以,使用html控件的准则是,尽量减少对html控件的使用;也尽量不要封装html控件。能不用就不用。