Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Vb.net简单文本框转换为整数时出错输入字符串格式不正确_Asp.net_.net_Vb.net - Fatal编程技术网

Asp.net Vb.net简单文本框转换为整数时出错输入字符串格式不正确

Asp.net Vb.net简单文本框转换为整数时出错输入字符串格式不正确,asp.net,.net,vb.net,Asp.net,.net,Vb.net,我想验证表单上的一些文本框。我想确认它们只包含数字,“总计”文本框等于其他框的总和: Protected Sub TotalBoxValidator_ServerValidate(source As Object, args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles TotalBoxValidator.ServerValidate If ((Convert.ToInt32(Box1.Text) + Conv

我想验证表单上的一些文本框。我想确认它们只包含数字,“总计”文本框等于其他框的总和:

Protected Sub TotalBoxValidator_ServerValidate(source As Object, args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles TotalBoxValidator.ServerValidate
    If ((Convert.ToInt32(Box1.Text) + Convert.ToInt32(Box2.Text) + Convert.ToInt32(Box3.Text) + Convert.ToInt32(Box4.Text) + Convert.ToInt32(Box5.Text) + Convert.ToInt32(Box6.Text) + Convert.ToInt32(Box7.Text)) = Convert.ToInt32(TotalBox.Text)) Then
        args.IsValid = True
    Else
        args.IsValid = False
    End If
End Sub
现在,在测试过程中,我只使用整数填充框。“总计”框将自动更新为其他框的总和。然而,当我点击表单上的“提交”按钮,所有的验证器都运行时,这个验证器不能正常工作

代码在第一个if语句中抛出错误,表示Convert.ToInt32调用的输入无效。“输入字符串的格式不正确”。我肯定我在每个盒子里放整数,我的TotalBox等于其他盒子的总和。所以我有点纠结于为什么这会抛出一个错误也许我把字符串转换成整数时出错了?


有人知道这里发生了什么吗

在知道文本值是否为整数之前,您试图将文本值转换为整数,请仔细阅读

整型锥虫

dim v1, v2, v3, v4, v5, v6, v7 as integer

if not integer.tryparse(box1.text, v1) then
     args.IsValid = False
     return
endif

if not integer.tryparse(box2.text, v2) then
     args.IsValid = False
     return
endif


......

在知道文本值是否为整数之前,您正在尝试将文本值转换为整数,请仔细阅读

整型锥虫

dim v1, v2, v3, v4, v5, v6, v7 as integer

if not integer.tryparse(box1.text, v1) then
     args.IsValid = False
     return
endif

if not integer.tryparse(box2.text, v2) then
     args.IsValid = False
     return
endif


......

在知道文本值是否为整数之前,您正在尝试将文本值转换为整数,请仔细阅读

整型锥虫

dim v1, v2, v3, v4, v5, v6, v7 as integer

if not integer.tryparse(box1.text, v1) then
     args.IsValid = False
     return
endif

if not integer.tryparse(box2.text, v2) then
     args.IsValid = False
     return
endif


......

在知道文本值是否为整数之前,您正在尝试将文本值转换为整数,请仔细阅读

整型锥虫

dim v1, v2, v3, v4, v5, v6, v7 as integer

if not integer.tryparse(box1.text, v1) then
     args.IsValid = False
     return
endif

if not integer.tryparse(box2.text, v2) then
     args.IsValid = False
     return
endif


......
我建议您在文本框上使用

这将确保即使您的值不合适,页面也不会回发。标记示例:

<asp:CompareValidator ErrorMessage="errormessage" ControlToValidate="Box1" 
runat="server" Type="Integer" />
我建议您在文本框上使用

这将确保即使您的值不合适,页面也不会回发。标记示例:

<asp:CompareValidator ErrorMessage="errormessage" ControlToValidate="Box1" 
runat="server" Type="Integer" />
我建议您在文本框上使用

这将确保即使您的值不合适,页面也不会回发。标记示例:

<asp:CompareValidator ErrorMessage="errormessage" ControlToValidate="Box1" 
runat="server" Type="Integer" />
我建议您在文本框上使用

这将确保即使您的值不合适,页面也不会回发。标记示例:

<asp:CompareValidator ErrorMessage="errormessage" ControlToValidate="Box1" 
runat="server" Type="Integer" />

我的问题与我的TotalBox(一个ASP.net文本框控件)的“Enabled”属性设置为false有关。我这样做是因为它使文本框变灰,用户无法更改文本框的值。由于文本框未启用,我无法在运行时访问文本框的值。虽然我在页面的javascript中成功地更改了它的值,并且在页面上直观地更新了文本框的值,但是试图在代码中使用它的值作为字符串导致了错误

它与代码的逻辑或任何语法错误无关。为了解决这个问题,我将TotalBox的Enabled属性设置为true。现在,框不再变灰,用户可以将其总数更改为不同于框的总和,这并不是我想要的,但我再次在这里验证总数,所以这不是什么大问题。我将返回并尝试在javascript中灰显文本框,因为我感觉这将保持获取文本框值的能力,同时仍然将其灰显

编辑:上述解决方案确实有效。对于其他遇到这个问题的人来说,试着用JavaScript将文本框格式化,而不是.Net或ASP代码。p> 以下是更新的代码:

Protected Sub TotalBoxValidator_ServerValidate(source As Object, args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles TotalBoxValidator.ServerValidate
        Dim Box1Value = Convert.ToInt32(Box1.Text)
        Dim Box2Value = Convert.ToInt32(Box2.Text)
        Dim Box3Value = Convert.ToInt32(Box3.Text)
        Dim Box4Value = Convert.ToInt32(Box4.Text)
        Dim Box5Value = Convert.ToInt32(Box5.Text)
        Dim Box6Value = Convert.ToInt32(Box6.Text)
        Dim Box7Value = Convert.ToInt32(Box7.Text)
        Dim TotalBoxValue = Convert.ToInt32(TotalBox.Text)
        If (Box1Value + Box2Value + Box3Value + Box4Value + Box5Value + Box6Value + Box7Value = TotalBoxValue) Then
            args.IsValid = True
        Else
            args.IsValid = False
        End If
    End Sub
现在,这里是真正有助于调试这种情况的内容。尝试将转换放在不同的行上,因为当程序停止时,它会准确地显示出哪个转换出错。在我的例子中,TotalBoxValue行出现错误。所以我知道我的TotalBox出了问题。TotalBox与其他文本框有什么不同?首先,是总数。但我知道这是正确的。然后我想到了它的性质。其enabled属性设置为false,与其他框不同。所以我知道这必须改变


在asp.net中,由于某种原因,当控件的Enabled属性设置为false时,您无法在运行时访问其任何属性。这是我注意到的可能不直观的事情。

我的问题与我的TotalBox(一个ASP.net文本框控件)的“Enabled”属性设置为false有关。我这样做是因为它使文本框变灰,用户无法更改文本框的值。由于文本框未启用,我无法在运行时访问文本框的值。虽然我在页面的javascript中成功地更改了它的值,并且在页面上直观地更新了文本框的值,但是试图在代码中使用它的值作为字符串导致了错误

它与代码的逻辑或任何语法错误无关。为了解决这个问题,我将TotalBox的Enabled属性设置为true。现在,框不再变灰,用户可以将其总数更改为不同于框的总和,这并不是我想要的,但我再次在这里验证总数,所以这不是什么大问题。我将返回并尝试在javascript中灰显文本框,因为我感觉这将保持获取文本框值的能力,同时仍然将其灰显

编辑:上述解决方案确实有效。对于其他遇到这个问题的人来说,试着用JavaScript将文本框格式化,而不是.Net或ASP代码。p> 以下是更新的代码:

Protected Sub TotalBoxValidator_ServerValidate(source As Object, args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles TotalBoxValidator.ServerValidate
        Dim Box1Value = Convert.ToInt32(Box1.Text)
        Dim Box2Value = Convert.ToInt32(Box2.Text)
        Dim Box3Value = Convert.ToInt32(Box3.Text)
        Dim Box4Value = Convert.ToInt32(Box4.Text)
        Dim Box5Value = Convert.ToInt32(Box5.Text)
        Dim Box6Value = Convert.ToInt32(Box6.Text)
        Dim Box7Value = Convert.ToInt32(Box7.Text)
        Dim TotalBoxValue = Convert.ToInt32(TotalBox.Text)
        If (Box1Value + Box2Value + Box3Value + Box4Value + Box5Value + Box6Value + Box7Value = TotalBoxValue) Then
            args.IsValid = True
        Else
            args.IsValid = False
        End If
    End Sub
现在,这里是真正有助于调试这种情况的内容。尝试将转换放在不同的行上,因为当程序停止时,它会准确地显示出哪个转换出错。在我的例子中,我得到了一个错误o