How to Fix e.CommandArgument 'input string was not in a correct format.' error
by
Doug
Updated December 15, 2009
Here's one quick fix for the ASP.NET error System.FormatException: Input string was not in a correct format. when you are using a DataList with an asp:Button control and are trying to get the CommandArgument using the DataList_RowCommand.
Keep in mind this just one solution to why you may be getting this error message...
Essentially, my problem was that my asp:Button control had it's Viewstate set to false (EnableViewState="false"), so when the button was clicked in the DataList, the ItemCommands e.CommandArgument was getting set to null. So to fix the "Input string was not in a correct format." error message related to the e.CommandArgument all I had to do was to set the button control to EnableViewState="true". This "Input string was not in a correct format." error may also occur if your DataList's EnableViewState is set to false, so you may want to check that as well.
Here's what the Button control in my DataList looks like when getting the CommandArgument successfully:
<asp:Button ID="SubmitButton" runat="server" CommandName="SubmitComment" EnableViewState="true" CommandArgument='<%# Eval("ArticleId") %>' Text="Save Comment" />
Below is a sample DataList_ItemCommand with a simple check for a null CommandArgument:
//------------------------------------------------------------//
protected void CommentsDataList_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "SubmitComment")
{
if (Page.IsValid)
{
// Int64 articleId = Convert.ToInt64(e.CommandArgument);
// Test for null
string strArticleId = e.CommandArgument.ToString();
if (string.IsNullOrEmpty(e.CommandArgument.ToString()))
{
Response.Write("ArticleId = " + "null articleid" + "
");
}
else
{
Response.Write("ArticleId = " + strArticleId + "
");
}
}
}
}