关于自动生成页面的问题

sh_suyuelin 2009-03-06 11:53:49
有很多测试题目。
有三个表
T1 测试主题表 存放测试主题
T2 测试题目表 存放测试主题中的题目
T3 测试选项表 存放测试主题中题目的各选项



我想自动生成一个测试页面。要自动生成控件。比如单选。多选。和输入框等。并把值赋上去
然后在手动切成很多小页面。大家给点思路。。
...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxf2000104 2009-03-06
  • 打赏
  • 举报
回复
T3 测试选项表 存放测试主题中题目的各选项
这个表里头就应该有个类型,知道是什么类型。
sh_suyuelin 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lxf2000104 的回复:]
我的思路是动态生成HTML的字符串。
[/Quote]
用StringBuilder 然后判断是多选还是单选等。然后把控件输出来??
lxf2000104 2009-03-06
  • 打赏
  • 举报
回复
我做的是市场调查的东东,跟你的基本上差不多。也是标题,题目和选项。生成了HTML,然后提交FORM,得到测试项目的选项,对必选必填的都要有验证。
youngboy1983 2009-03-06
  • 打赏
  • 举报
回复
首先你要有一个生成页面的框架,然后根据T1中的类型设置要生成的控件,如单选。多选。和输入框等 至于你说的T3 测试选项表 存放测试主题中题目的各选项 我估计这个应该是你答案存放的地方 这个我没有经验 不知道怎么做
lxf2000104 2009-03-06
  • 打赏
  • 举报
回复
sb.Append(" <input type=\"hidden\" name=\"VoteID\" value=\""+ drQuestnaire["colID"].ToString() + "\" /> ");
//隐藏控件.
for (Int32 i = 0; i < ds.Tables[1].Rows.Count; i++)
{
sb.Append(Convert.ToString(i+1) + "、" + ds.Tables[1].Rows[i]["colName"].ToString());
isNeed = ds.Tables[1].Rows[i]["colNeed"].ToString();
//筛选获取该问题的子选项。
strQuestID = ds.Tables[1].Rows[i]["colID"].ToString();
dr = ds.Tables[2].Select(" colParentID = " + strQuestID + "");
//如果是下拉框.
if (ds.Tables[1].Rows[i]["colType"].ToString() == "3")
{
sb.Append("<select name=\"" + strQuestID + "\" onchange=\"EnableObj(this,'" + strQuestID + "')\" >");

for (int j = 0; j < dr.Length; j++)
{

sb.Append("<option value=\"" + dr[j]["colID"].ToString() + "\" >" + dr[j]["colName"].ToString() + "</option>");

if (dr[j]["colType"].ToString() == "0" )
{
if(isNeed == "True")
{
strWarning = "warning=\"" + dr[j]["colName"].ToString() + "不能为空!\"";
}
strSelect += " <div id=\"" + dr[j]["colID"].ToString() + "\" style=\"display:none\"><input type=\"text\" name=\"" + dr[j]["colID"].ToString() + "\" "+strWarning+" maxlength=\"300\" /></div>";
}
}
//下拉框的内容填完后,填写文本框.
sb.Append("</select>" + strSelect + "<br />");
strSelect = "";
strWarning = "";
}
else
{
checkValue = "";
if (ds.Tables[1].Rows[i]["colType"].ToString() == "1")
{
typeName = "radio";
if (isNeed == "True")
{
checkValue = " check=\"^0$\" warning=\"" + ds.Tables[1].Rows[i]["colName"].ToString() + "最少选一项\" ";
}
}
else if (ds.Tables[1].Rows[i]["colType"].ToString() == "2")
{
typeName = "checkbox";
if (isNeed == "True")
{
checkValue = " check=\"^0{1,}$\" warning=\"" + ds.Tables[1].Rows[i]["colName"].ToString() + "最少选一项或以上\" ";
}
}
else
{
typeName = "";
// checkValue = " check=\"^\\S+$\" warning=\"其它的意见不能为空\" ";
}
sb.Append(" <br />");
for (int j = 0; j < dr.Length; j++)
{
if (dr[j]["colType"].ToString() == "0") //类型为0
{
if (typeName != "")
{
sb.Append("<input type=\"" + typeName + "\" name=\"" + strQuestID + "\" " + checkValue + " onclick=\"EnableObj(this," + strQuestID + "," + dr[j]["colID"].ToString() + ")\" value=\"" + dr[j]["colID"].ToString() + "\" />");
}
//如果问题类型是文本框类型,则子问题下的文本框加验证信息,
//若问题类型是其他类型,则子问题下的文本框不加验证信息,根据是否选中来验证文本框不能为空.
if (isNeed == "True")
{
strWarning = "warning=\"" + dr[j]["colName"].ToString() + "不能为空!\"";
}
if (dr[j]["colNeed"].ToString() == "True" && ds.Tables[1].Rows[i]["colType"].ToString() == "0")
{
sb.Append(" " + dr[j]["colName"].ToString() + " <input type=\"text\" id=\"" + dr[j]["colID"].ToString() + "\" name=\"" + dr[j]["colID"].ToString() + "\" check=\"^\\S+$\" warning=\"" + dr[j]["colName"].ToString() + "不能为空\" maxlength=\"300\" /><br />");//onchange=\"checkTextOfForm(this)\"
}
else if (ds.Tables[1].Rows[i]["colType"].ToString() == "0")
{
sb.Append(" " + dr[j]["colName"].ToString() + " <input type=\"text\" id=\"" + dr[j]["colID"].ToString() + "\" name=\"" + dr[j]["colID"].ToString() + "\" maxlength=\"300\" /><br />");//onchange=\"checkTextOfForm(this)\"
}
else
{
sb.Append(" " + dr[j]["colName"].ToString() + " <input type=\"text\" id=\"" + dr[j]["colID"].ToString() + "\" name=\"" + dr[j]["colID"].ToString() + "\" readOnly " + strWarning + " maxlength=\"300\" /><br />");//onchange=\"checkTextOfForm(this)\"
}
}
else
{
sb.Append("<input type=\"" + typeName + "\" name=\"" + strQuestID + "\" " + checkValue + " onclick=\"EnableObj(this,'" + strQuestID + "','" + dr[j]["colID"].ToString() + "')\" value=\"" + dr[j]["colID"].ToString() + "\" />" + dr[j]["colName"].ToString() + " <br />");
}
//第一个checkbox 或者radio有验证信息属性.
checkValue = "";
strWarning = "";
}
}


}
chenhaoying 2009-03-06
  • 打赏
  • 举报
回复
用datalist的模板列嵌套datalist实现,google搜索"asp.net控件嵌套"。
一些参考:
http://topic.csdn.net/t/20040418/17/2980066.html
http://www.cnblogs.com/jembai/archive/2008/08/19/1271370.html
lxf2000104 2009-03-06
  • 打赏
  • 举报
回复
我的思路是动态生成HTML的字符串。
简介: 1、多级目录,每个目录下面可以有更深一级目录,并列出属于该目录的网站 管理:选择分类管理,添加需要的分类,或者选择下一级目录,同时可以选择删除(删)修改(修)制作(制)某一个目录 2、静态页面,所有目录页面均使用程序生成了html页,不用读取数据库,大大节省了服务器资源 管理:选择制作下属页面,系统会列出搜索的类别,请选择需要生成的类别 3、目录模版,在数据库中存放了大量的页面模版,每一个目录都可以订制自己的网面 管理:选择模板管理,系统会列出目前已经存在的模板,你可以修改,添加,删除,添加时请按照示例进行制作,建议先将数据库备份再修改 4、即时登陆网站,站长可以随时登陆自己的网站,但是登陆以后只能在他选定的目录所显示的页面中的“更多”网站页面中显示出来,只有在管理员审查并生成页面以后才能直接在目录页面看到 5、模糊查找, 6、布尔查找,支持and(*) or(|) not(-)等布尔表达式 例如:烟台*一百-新闻 或者:烟台 and 一百 not 新闻 如果只需要and连接,可以只输入 烟台 一百,这与 烟台*一百、烟台 and 一百 效果等同 搜索结果将会把相关关键词以特殊的颜色显示出来 7、常用关键词页面自动生成,用户输入查找的关键词都保存在数据库中,如果有相同的关键词则这些关键词数量累加,管理员管理的时候可以生成排名在头几位的关键词页面,也就是提前替用户把这些关键词提前搜索出来了,并且生成了静态的html页面,用户在搜索这些关键词时,就可以直接显示这些已经生成的页面,避免了大量的查询数据库,节省了服务器资源 管理:选择关键词管理,系统会列出数据库中已经存在的可以生成的关键词,以及网友在使用这个搜索引擎时用的关键字(只选取排名头100个),管理员可以随意生成需要的关键词页面 8、网站顺序,在某个目录下的网站数目很多的时候,排在上面的网站被访问的几率比排在下面的网站几率要大得多,因此我又增加排名功能,管理员可以设定某个网站在该目录下的排名 9、单目录搜索,当用户在某个目录浏览的时候,可以选择在该目录下搜索和搜索全部目录,选择在该目录下搜索可以只搜索属于该目录以及该目录的子目录下的网站 10、静态页面在线生成,在管理界面可以在线生成所有目录下的页面以及关键词页面 11、二次搜索功能,当用户在搜索某个关键词以后,系统列出了〉20个结果以后,就会出现二次搜索界面,用户可以选择在这些结果中再次搜索,比如要求结果必须不包含某个关键词或者必须再包含某个关键词 12、模版的在线修改,不同的页面模版有不同的规则 14、所有目录在线动态修改,自动更新以前的页面 15、动态生成网站首页(需要模版支持) 16、分类参照:指一个分类类目名分在一个上级类目下,而在另一个类目下作参照。以@作后缀的类目名。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧