2014-02-18 108 views
0

我有一个“编辑”窗体,它从特定行中提取数据。这种形式的一部分包括单选按钮(一组四个)。我能够从已选中的单选按钮中检索数据,但其他三个没有任何内容,并且我得到一个空值错误。我怎么能阻止呢?我基本上有1个单元格,它将所选的单选按钮的值推入。在我的ASP代码,我有它设置如下:ASP单选按钮空值

<input <%If (CStr((rsCourseNum.Fields.Item("question1Correct").Value)) = CStr("answer1")) Then Response.Write("checked=""checked""") : Response.Write("")%> type="radio" name="question1Correct" id="question1Correct" value="answer1"> 

这将抛出一个错误,如果answer0是在分贝,因为没有ANSWER1,我只是不知道到底该如何设置,以防止它从调用一个空值。

+1

这是经典的ASP或ASP.NET?有很大的不同。 –

+0

我很抱歉,asp经典,现在已经编辑线程来反映。 – hexobolic

+0

没有为避免空值'&“”'只是使用'rsCourseNum.Fields.Item(“question1Correct”)。价值与“”'我倒是类它作为一个黑客但工作这么多次为我一个非常简单的方法这些年来。 – Lankymart

回答

2

什么是Response.Write("")呢?

你得不到,因为你正在检查这恰好是空dB值的误差;你正在尝试将Null转换为字符串时发生错误。有两个*解决这个问题。方法之一是没有做任何数据类型转换:

Response.Write "<input type=""radio"" name=""question1Correct"" id=""q1c""" 
If rsCourseNum("question1Correct") = "answer1" Then Response.Write " checked" 
Response.Write " value=""answer1""><label for=""q1c"">Question 1</label>" 

这将空值工作,因为比较Null = "answer1"将返回NULL,这是不正确的,所以按钮没有标记。

另一种方法是显式检查空值,和仅做一个数据类型转换如果该值不为空。

Response.Write "<input type='radio' name='q" & i & "' id='q" & i & "c'" 
If Not IsNull(rs("q" & i)) Then 
    If CStr(rs("q" & i)) = CStr(answers(i,0)) Then Response.Write " checked" 
End If 
Response.Write " value='" & answers(i,0) & "'>" 
Response.Write "<label for='q" & i & "c'>" & answers(i,1) & "</label>" 

*好了,二,呃, “正确” 的解决这个办法。还有一种奇怪的方法:追加一个空白字符串,而不是使用CStr。 (谢谢你的提示,Lankymart!)

If rs("q" & i) & "" = CStr(answers(i,0)) Then Response.Write " checked" 

+0

感谢您的帮助玛莎!感谢您提供一些背后的解释! – hexobolic

+0

超级哈克你甚至不需要'CStr()'作为'&“”'来进行投射。 – Lankymart

+0

好吧,它似乎只适用于第一个值,这意味着如果我将这个相同的代码应用到其他4个单选按钮并更新数据库以说“answer2”第二个单选按钮似乎不正确地收集此输入,那么处理多个单选按钮时需要采取的附加步骤? – hexobolic