根据选择动态生成表单暨对kijiji发布信息的研究
最近遇到一个问题就是根据不同的情况生成不同的表单,不知大家有没有用过kijiji的信息发布,就是类似那样的,比如我选择了房源出租就显示房屋的必要信息比如方位,装修,面积等等,而我选择了汽车就会出现如年份,公里数等等。而且是有的必填有的不用填。
而且他们有几个必须的比如标题,联系人,qq等等这是每一个页面都一致的,那根据类别来的字段是怎么搞定的呢!
没有看他们的html的时候我就在想肯定input的name是中文的,然后cs中获取中文名字然后再进行操作,于是乎一看果然如此,于是写了一个小小的测试:
比如页面是
然后后台获取的时候首先获取页面上所有的input 如:
获取这个string的数组之后开始判断假如某一项不为空,就是说填写了相应的内容我就获取你,否则就不获取你。这应该就是kijiji的原理,至于怎么限制他我看到他是input的class 比如是num maxlength这样,用来限制类型长度 以及必填等属性,如果不行还可以用js 写一个js 传入(id,title,max,must),然后在input的text中onchange的时候执行这个js就可以检测。
接着cs中这样来写:
此时就可以获取相应的input
然后input内部比如房屋面积可以使用
然后存放到统一的一个字段。读取出来的时候split一下就好了!
但有一个问题,kijiji的分类有近150个,假如每一种情况都去写一个面的话显然不现实,而看了他的html会发现他的这些非公用的字段都是比较乱的也就是一般是自动生成的!你要考虑了 自动生成 怎么能来约束radio 还是checkbox还是text 如果加入这么多的判断这个页面会不会太复杂了!速度肯定受限制。
但是假如每一个分类都有一个页面那他可能就要写近150个页面!也会很累,有没有折中的办法!希望有的话可以详细点!
而且他们有几个必须的比如标题,联系人,qq等等这是每一个页面都一致的,那根据类别来的字段是怎么搞定的呢!
没有看他们的html的时候我就在想肯定input的name是中文的,然后cs中获取中文名字然后再进行操作,于是乎一看果然如此,于是写了一个小小的测试:
比如页面是
房屋面积:<input type="text" name="房屋面积">
房屋位置: <input type="text" name="房屋位置">
房屋位置: <input type="text" name="房屋位置">
然后后台获取的时候首先获取页面上所有的input 如:
string[] str = Request.Form.AllKeys;
获取这个string的数组之后开始判断假如某一项不为空,就是说填写了相应的内容我就获取你,否则就不获取你。这应该就是kijiji的原理,至于怎么限制他我看到他是input的class 比如是num maxlength这样,用来限制类型长度 以及必填等属性,如果不行还可以用js 写一个js 传入(id,title,max,must),然后在input的text中onchange的时候执行这个js就可以检测。
接着cs中这样来写:
for (int i = 0; i < str.Length; i++)
{
if (Request.Form[str[i]].ToString() != "")
{
Response.Write(str[i].ToString()+":"+Request.Form[str[i]].ToString()+"<br/>");
}
}
{
if (Request.Form[str[i]].ToString() != "")
{
Response.Write(str[i].ToString()+":"+Request.Form[str[i]].ToString()+"<br/>");
}
}
此时就可以获取相应的input
然后input内部比如房屋面积可以使用
str[i].ToString()+":"+"$"+Request.Form[str[i]].ToString()
隔开,而比如房屋面积和房屋位置则可以使用另外一种特殊符号分开。然后存放到统一的一个字段。读取出来的时候split一下就好了!
但有一个问题,kijiji的分类有近150个,假如每一种情况都去写一个面的话显然不现实,而看了他的html会发现他的这些非公用的字段都是比较乱的也就是一般是自动生成的!你要考虑了 自动生成 怎么能来约束radio 还是checkbox还是text 如果加入这么多的判断这个页面会不会太复杂了!速度肯定受限制。
但是假如每一个分类都有一个页面那他可能就要写近150个页面!也会很累,有没有折中的办法!希望有的话可以详细点!