100分求一解决办法:

km168 2004-01-03 05:55:48
我正在写一个在线考试的系统,其中有种题型——填空题,想不出有什么好的办法来存储和显示,大家一起帮帮忙吧。

存储还好说,关键是显示。每道题需要添的空的数目都不同,有的是一个,有的两个或三个,如果用DataGrid或DataList或Repeater显示的话,模板列那一块怎么写?
例如,下面两道填空题:
(1)1+2=___?
(2)CSDN有___个版块?其中.NET技术有___个子版块?

如何显示?空格处应当放TextBox控件。

...全文
46 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lostinet 2004-01-03
  • 打赏
  • 举报
回复
例子都给你做了
:
<%@ page language="C#"%>
<script runat="server">
public class Question : Control , INamingContainer
{
public string Text
{
get
{
object o = ViewState["Text"];
return o == null ? string.Empty : (string)o;
}
set
{
ViewState["Text"] = value;
if(created)
ClearControls();
}
}
protected override void CreateChildControls()
{
base.CreateChildControls();
ConstructTextBoxes();
}
bool created=false;
protected void ClearControls()
{
Controls.Clear();
ClearChildViewState();
al = null;
created = false;
}
static string[] Split(string str, string spliter)
{
int slen = spliter.Length;
int pos1 = 0;
int pos2 = str.IndexOf(spliter);
ArrayList al = new ArrayList();

while (pos2 > -1)
{
al.Add(str.Substring(pos1, pos2 - pos1));
pos1 = pos2 + slen;
pos2 = str.IndexOf(spliter, pos1);
}

al.Add(str.Substring(pos1, str.Length - pos1));
return (string[])al.ToArray(typeof(string));
}
protected void ConstructTextBoxes()
{
al = new ArrayList();
string[] strs = Split(Text, "___");
Controls.Add(new LiteralControl(strs[0]));
for (int i = 1; i < strs.Length; i++)
{
TextBox tb = new TextBox();
tb.ID = "Question" + i;
al.Add(tb);
Controls.Add(tb);
Controls.Add(new LiteralControl(strs[i]));
}
created = true;
}
ArrayList al;
public TextBox[] TextBoxes
{
get
{
EnsureChildControls();
return (TextBox[])al.ToArray(typeof(TextBox));
}
}
}

Question q1 = new Question();
Question q2 = new Question();

protected override void OnInit(EventArgs e)
{
base.OnInit(e);

q1.Text = "1+2+___=___是错误的。";

ph1.Controls.Add(q1);
ph2.Controls.Add(q2);
}

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
{
q2.Text = "C#中的#的英文是___。";
}
}

void button_click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
foreach (Question q in new object[] { q1, q2 })
{
foreach (TextBox tb in q.TextBoxes)
{
if (sb.Length != 0)sb.Append(",");
sb.Append(tb.Text);
}
}
result.Text = "您的答案是:"+sb.ToString();
}
</script>
<html>
<head runat="server">
<title>sample</title>
</head>
<body>
<form runat="server" id=form1>
1:<asp:placeholder id=ph1 runat=server></asp:placeholder>
<br />
2:<asp:placeholder id=ph2 runat=server></asp:placeholder>
<br />
<asp:button runat=server text="提交答案" onclick="button_click"/>
<br />
<asp:label id=result runat=server></asp:label>
</form>
</body>
</html>
caoit 2004-01-03
  • 打赏
  • 举报
回复
FiLng(飞浪)的思路不错,学习
FiLng 2004-01-03
  • 打赏
  • 举报
回复
上面只是给出一个思路,
你的题出来了,你肯定知道哪里应替换!
llww7779 2004-01-03
  • 打赏
  • 举报
回复
加一个全角空格标识符号贝
zhongkeruanjian 2004-01-03
  • 打赏
  • 举报
回复
___
这个标识符号也不好,
FiLng 2004-01-03
  • 打赏
  • 举报
回复


如以"__"表示要填的空:

string s = "CSDN有___个版块?其中.NET技术有___个子版块?";

s.Replace("__", "<asp:TextBox runat=\"server\"/>");
// 得到包含TextBox和你的文本的一个ctrl;
System.Web.UI.Control ctrl = Page.ParseControl(s);
this.Controls.Add(ctrl); // 添加到当前所在页面或某个父控件中;
int i = 0;
foreach (Control tbc in ctrl.Controls)
{
TextBox tb = tbc as TextBox;
if (tb != null)
{
tb.ID = i++;// 赋给不同的ID;
}
}
xueqs 2004-01-03
  • 打赏
  • 举报
回复
在线考试中应该避免有填空题
一是不好显示;二是不好自动评分;
rainfall007 2004-01-03
  • 打赏
  • 举报
回复
关注ing………………upup
gj0001 2004-01-03
  • 打赏
  • 举报
回复
我的建议
可否这样设计表

题号 填空数目 题的内容 填空处标志
01 2 CSDN有___个版块? _
其中.NET技术有___个子版块

这样用DataList就可以了
FiLng 2004-01-03
  • 打赏
  • 举报
回复
如以"__"表示要填的空:

string s = "CSDN有___个版块?其中.NET技术有___个子版块?";

s.Replace("__", "<asp:TextBox runat=\"server\"/>");
// 得到包含TextBox和你的文本的一个ctrl;
System.Web.UI.Control ctrl = Page.ParseControl(s);
this.Controls.Add(ctrl); // 添加到当前所在页面或每个父控件中;
int i = 0;
foreach (Control tbc in ctrl.Controls)
{
TextBox tb = tbc as TextBox;
if (tb != null)
{
tb.ID = i++;// 赋给不同的ID;
}
}
牛牛Alex 2004-01-03
  • 打赏
  • 举报
回复
在线考试中应该避免有填空题
zhongkeruanjian 2004-01-03
  • 打赏
  • 举报
回复
我觉得要做一个题目控件,首先要让题目填空处有一个特定的格式,比如
1+2=X,
在CREATECONTROLS的时候,判断,遍历字符,如果碰到X,就添入TEXTBOX,
直到结束

然后再把题目集绑定到DATALIST,

不过X这个标识符号不太好,
redfoxhuang 2004-01-03
  • 打赏
  • 举报
回复
动态添加控件

62,046

社区成员

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

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

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

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