答案:做一个考试系统,客户要求要有填空题,实现的过程中可谓费尽周折,在这里说一说实现的过程。
1、出题的时候,将需要填空的部分用固定长度的下划线表示,保存到数据库中,字段名字为stnr
2、取出stnr,用分割函数以固定长度的下划线为分隔符,将除填空部分以外的字符串搞到一个数组里,然后循环取出这个数组里每一个值并上<input type='text' id=''>赋给字符串str,再用table.innerHtml=str,这样就将考题输出到表格里了,填空的部分被替换成文本框
---------------------xx.aspx.vb-----------------
Private Sub Create()
Dim str As String
str = dv.Item(0).Item("stnr").ToString.Trim
Dim a() As String
a = Split(str, "_____", -1, CompareMethod.Text)
Dim i As Int16
Dim str1 As String
For i = 0 To a.Length - 2
If dvDab.Count > 0 Then
Dim strDab As String
strDab = dvDab.Item(0).Item("da").ToString.Trim
Dim s() As String
s = Split(strDab, "|", -1, CompareMethod.Text)
str1 = str1 & a(i) & "<input type='text' id='text" & i & "' style='BORDER-TOP-STYLE: none; BORDER-BOTTOM: green thin solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 22px; WIDTH: 109px; BACKGROUND-COLOR: transparent' runat='server' value='" & s(i) & "'>"
Else
str1 = str1 & a(i) & "<input type='text' id='text" & i & "' style='BORDER-TOP-STYLE: none; BORDER-BOTTOM: green thin solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 22px; WIDTH: 109px; BACKGROUND-COLOR: transparent' runat='server'>"
End IfNext
'textCount记录了填空的个数,传递给JS执行循环
textCount.Value = a.Length - 1
TD2.InnerHtml = str1 & a(a.Length - 1)
End Sub
3、接下来就是取这些文本框的值了,刚开始的时候尝试Request.From('')取不到值,用page.FindControls也找不到这些文本框,之前我让他们都Runat=Server的,很是奇怪。最后想到了用JS,JS循环取值后将所有文本框中的值加个分隔符并到一个hidden控建里,然后由Asp.net来跟标准答案作比较,评分
------------------xx.aspx----------------
function aa(){
var count=document.all("textCount").value;
var hiddentext = "";
for(i=0;i<count;i++){
hiddentext+=“|”+document.all(“text“+i).value;
}
document.all(“hiddentext“).value=hiddentext;
}
————————xx.aspx.vb——————————
Public Sub Point()
Dim i() As String
Dim a As Int16Da = Da.Remove(0, 1)
i = Split(Da, ",", -1, CompareMethod.Text)
Dim ii() As String
ii = Split(dvTk.Item(0).Item("stda2"), ",", -1, CompareMethod.Text)
Dim fs2 As Single
For a = 0 To i.Length - 1
If i(a) = ii(a) Then
fs2 = dvScsj.Item(0).Item("xtfs") / ii.Length
Else
fs2 = 0
End If
fs += fs2
Next
End Sub5、再补充一点,提交之后,文本框中的内容会被清空,但是数据已经却提交到服务器,我就重新执行一次Create(),至此,问题全部解决。
代码质量比较差,欢迎指教!