Friday, 17 April 2009

CheckBoxList - startIndex cannot be larger than length of string

Have you ever created a custom checkboxlist and then recieved the following error when you submit the form if any of the check boxes are selected?

startIndex cannot be larger than length of string.
Parameter name: startIndex
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: startIndex cannot be larger than length of string.
Parameter name: startIndex

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentOutOfRangeException: startIndex cannot be larger than length of string.
Parameter name: startIndex]
System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +7492915
System.Web.UI.WebControls.CheckBoxList.LoadPostData(String postDataKey, NameValueCollection postCollection) +60
System.Web.UI.WebControls.CheckBoxList.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +13
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +346
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1743



I have and it took quite some Googling to find a solution. The error is caused by the checkbox name not following the Microsoft.NET convensions, i.e. ctl13$ctl02$
The solution was to update the name to use UniqueID + $ + index on the end.

protected override void RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer)
{
var labelID = UniqueID + "$" + repeatIndex;
writer.Write(string.Format("<input value=\"{1}\" id=\"{0}\" name=\"{0}\" type=\"checkbox\" {2} />",
labelID,
Items[repeatIndex].Value,
Items[repeatIndex].Selected ? " checked=\"checked\"" : ""));
}

Thursday, 2 April 2009

Hidden windows?

I use a dual screen display in work, but when I remote in from home I only have one. Sometimes I have left windows open that seem to appear still on a second monitor. To view these hidden windows. Select the window in the task bar and enter:
Alt + Space bar + M
and then use your arrow keys to move the window in to view.