2014-12-05 110 views
-1

我试图运行一个存储过程,需要一个int才能正常工作。我从数据网格中抽取“ID”,然后尝试解析int以允许该过程运行,但是在标题中提到了错误。有没有更好的方法来做到这一点?解析字符串:输入字符串格式不正确。 #

<asp:BoundColumn DataField="ID" Visible="true"></asp:BoundColumn> 

<asp:Button ID="btnMarkComplete" Text="Mark Complete" runat="server" CommandArgument='<$# Eval("ID") %>' OnClick="BtnMarkCompleteClick"/> 
         </ItemTemplate> 


int iD = Convert.ToInt32(d.CommandArgument.ToString()); 
+2

您试图转换的值是什么? – 2014-12-05 15:31:33

+1

你的字符串格式不正确,这意味着,如果像'abcde'这样的东西不能被解释为int。 – mihai 2014-12-05 15:31:55

+0

你有没有放置一个断点,并尝试看看你在“d.CommandArgument”中获得了什么值? – 2014-12-05 15:31:59

回答

2

在回答你的问题时,“有没有更好的方法来做到这一点”?

是的,这就是所谓的TryParse

int iD = 0; 

if(Int32.TryParse(d.CommandArgument.ToString(), out iD)) 
{ 
    // Do something with iD 
} 

说明

你暗示(使用基本Convert方法),输入可以转换为Int32,这是为什么你不能得到例外。按照我上面提出的方式,你只是试图解析它。 TryParse返回boolean然后您可以评估以决定执行路径。

+0

谢谢,这原来是一个修复它。 – 2014-12-05 15:40:11

+0

嗯,这将确保有一个检查 - 但它不会影响你通过它的输入(即转换仍然没有发生)。请注意这一点。 – 2014-12-05 15:51:17

2

有一个错字那里开始:

<$# Eval("ID") %> 

应该

<%# Eval("ID") %> 

所以,你正试图将字符串值<$# Eval("ID") %>转换为整数,这将失败并引发您收到错误。由于输入错误,该字段不会绑定到ID。