Home     About PeterBlum.com     Policies     Download a Licensed Product     Newsletter

Release History for {0}


11/23/2013 Peter's Data Entry Suite 5.0.5 Update
You should get this release because earlier releases do not support Internet Explorer 11 with a client side experience. No scripts were loaded when IE 11 was used. If you have any other version, please go here for directions:Internet Explorer 11 requires upgrade or hotfix to work.

New features:
  • Support for Internet Explorer 11.
Bug fixes:
  • CurrencyTextBox, PercentTextBox, and the Currency and Percent options in a Validator's DataType property failed to support Decimal and Single types.
  • CurrencyTextBox and the Currency option in a Validator's DataType property failed to use the CultureInfo.NumberFormat.CurrencyGroupSizes property.
  • DecimalTextBox did not use the TrailingZeroDecimalPlaces or MaxDecimalPlaces properties.
  • When using the String Lookup System, if the value passed in as a LookupID was not found, it would return a blank string instead of the default string. For example, if you have a control with Text="abc" and TextLookupID="code_abc", it should return "abc" when there is no value stored as a resource named "code_abc", but instead it returned "".
  • Buttons on Calendar, MonthYearPicker, and TimePicker controls whose label contained the token "{IMAGE}" did not get the image embedded.
  • CheckStateValidator did not correctly attach to <input type='radio' runat='server' > or <input type='checkbox' runat='server' > tags.
  • Removed a licensing restriction on the LinkButton's WhenDisabledCssClass property.
  • Date and Time textboxes failed to show the value assigned to their ToolTip property when AutoHints were off.
  • FieldStateControllers would inject the wrong markup when using design mode to add references to other controls in its ControlConnection property.
  • DateTextBox failed to support the Mongolia (mn-MN) culture during client-side parsing.
  • DuplicateEntryValidator would not apply its Trim property value.
  • Peter's Input Security's Security Analysis Report failed to output the many validator controls found on the page.
  • MultiSegmentDataEntry controls failed to show alternative style sheets in segments after a postback detects an error.
BLD bug fixes:
  • String Lookup System failed to return strings from resource files if they were in the BLDErrorMessages, BLDLabels, or DataAnnotations resource files.
  • When using SQL Server to store ASP.NET View State, this error occurred with a BLDWidgets control: "The constructor to deserialize an object of type 'PeterBlum.DES.BLD.BLDWidgetsViewState' was not found."

11/24/2012 Peter's Data Entry Suite 5.0.4 Update

This release is based on the release of FireFox v17. That browser changed its User Agent string in a way that prevents DES from recognizing the browser. As a result, DES scales down features to server side only. There are no javascript elements in FireFox 17.

DES 5.0.4 detects the new User Agent which ensures the full client-side experience.

11/12/2012 Peter's Data Entry Suite 5.0.3 Update
New features:
  • IntegerTextBox, DecimalTextBox, CurrencyTextBox, and PercentTextBox now offer the AllowThousandsSeparator property. By default, users can type in the thousands separator symbol. When this is false, they cannot and if validation finds this character, it causes validation error.
  • IE 10 has poor support for filter styles, a feature introduced by Microsoft in IE 5.5 that provides the shadow and fade-in/out effects used by DES’s popup elements. The result is a JavaScript error on that browser. IE 10 is now detected and these features are disabled.
  • Compatibility with Telerik RadControls 2012 Q3 release. Telerik had made changes in their client-side API making some controls have a JavaScript error and others not validate correctly.
Bug fixes:
  • Design mode would report an error instead of drawing the control in several cases, due to a bug introduced in v5.0.2
  • Popup calendar sometimes did not engage keyboard support after a second popup.
  • Popup toggle buttons for calendar, monthyearpicker, and timepicker all should have closed the popup when opened. They left it open. These buttons now act as a true toggle.
  • Client-side calculation for the length of a string in a textbox counted carraige returns incorrectly on modern browsers. FireFox 15+, IE 9+, and Safari 5+ changed how many characters they stored in memory for each carraige return from two characters (ASCII 13+ ASCII 10) to ASCII 10 alone. On the server side, the browsers always postback ASCII 13+ASCII 10. Now TextLengthValidator and TextCounter control count 2 characters for each carraige return even if they store only 1 character on the client-side.
  • The value of the marked checkbox in a CheckBoxList did not work with the CompareToValueValidator or CompareToValueCondition on the client-side.
  • When JavaScript is detected to be disabled, some scripts were still written to the page.
  • The mouse over and mouse down effects of some buttons with images did not work. This was noticable on the Calendar’s next and previous month/year buttons.
  • VisibleCondition, EnabledCondition, and ReadOnlyCondition did not evaluate correctly on the client-side.
  • Calendar part showing the month and year names did not apply the correct style sheet based on the MonthYearCommandAndLabel.CssClass property. It worked initially but a mouse over would apply an incorrect class.
  • CalculationController’s attempted to assign a decimal value to an IntegerTextBox causing a TypeCastException when the ShowValueControlID specified an IntegerTextBox.
  • Using the Input Security module’s LogAndRespond system to track an exception or error would cause a NullReferenceException if tracking an error when using an HttpHandler other than one that loads the page.
  • The DecimalTextBox, CurrencyTextBox, and PercentTextBox would return the value of Int32.MinValue instead of Double.MinValue when you call their DoubleBindable property and there is no value assigned yet.
  • The ValidationManager.OnAdjustValidatorToBrowser event would cause a NullReferenceException if the browser cause the ErrorFormatter to be replaced. Impacted webcrawlers.
BLD bug fixes:
  • Server-side UI-level validation for the RequiredAttribute failed.
  • Currency FieldTemplates did not use the UseCurrencySymbol property from the CurrencyDataTypeAttribute.
  • Percent FieldTemplates did not use the UsePercentSymbol property from the PercentDataTypeAttribute.
  • Several exceptions raised by the Filter controls.

5/21/2012 Peter's Data Entry Suite 5.0.2 Update

Bugs fixed

  • Web Application Updater reported an error when installing a service release that stopped the process. The error indicated a file call PeterBlum.DES.BLD3_5.dll which does not ship with the product. Specific to 5.0.1.
  • Validation errors using the HiliteFields and "Change the style of the field with the error" had errors when using ajax or server side only validators controls. They did not correctly change the appearance of these fields.
  • In FireFox, Calendar control did not fully disable when you attempted to disable it. Usually this involved using the FieldStateController to disable it, but users might have tried to set the DOME disabled attribute on the Calendar's div tag. In this case, the control appears visually disabled, but still allowed clicks and keyboard commands to modify the date.
  • Validation with these RadControls Q2 2012 or later generated a javascript error: RadTextBox, RadMaskedTextBox, and RadNumericTextBox.
  • BREAKING CHANGE: RadMaskedTextBox validation was inconsistent between client and server side validation. Server side validation's methodology is considered correct and applied to the client-side code. Now client side validation includes the text inserted by the mask, just like using the RadMastedTextBox.ValidatedText property does. Previously, validation only looked at the text the user enters, ignoring the text inserted by the mask.
  • IE 9 changed how to turn off autocomplete. This is now fixed.
  • When validating with the PopupErrorFormatter and PageManager.FocusOnSubmit=true, if the validator with the PopupErrorFormatter reports a server side error, focus did not jump to that validator's control to evaluate. It now does.
  • IgnoreConditionValidator now automatically establishes client-side javascript for its ErrorFormatter. Previously you had to set the OverrideClientSideEvaluation property.

4/4/2012 Peter's Data Entry Suite 5.0.1 Update
  • Supports the recently released Telerik RadControls 2012 Q1 release. This release changed the IDs to the HTML elements of the controls, breaking existing scripts. Installation of 5.0.1 is enough to get it to work. There are no additional files to install.
  • Cleaned up how memory is disposed so that when a control is removed from the tree, its memory is usually released right away instead of waiting for the .net Garbage Collector to dispose it.
  • New property: HeaderSeparator in the ValidationSummary control. It overrides the default text inserted after the Header to separate it from the list.
  • CurrencyTextBox: The AllowExtraDecimalDigits property acted as if it was set to true when the property was left to its default. It should act as if it was set to true (not allowing extra decimal digits.)
  • CurrencyTextBox, DecimalTextBox, and PercentTextBox: The AcceptPeriodAsDecimalSeparator property threw a TypeCastException.
  • IntegerTextBox: The FillLeadZeros property did not work after a postback. The server side code that reformats failed to account for it. Client-side code worked correctly.
  • Validators using DataType="Percent" but not pointing to a PercentTextBox should have required only integers. They allowed decimals too.
  • DateTextBox: The position of the popup calendar was overlapping the textbox and toggle image. Now it positions at the bottom of the image. (If the image is smaller than the textbox, it will still overlap.)
  • Validators: When contained in a control that is Visible=false, server side validation still occurred. It should have not validated.
  • Design mode: several properties that have not been modified were getting written out into the ASP.NET markup when you edit another property in the Properties Editor. This occurred in a few controls.
  • SpecialDates in Design mode: The editor for TokenDefinitions and DataFieldsWithTokens failed when you clicked the Add button.
  • MultiConditionValidator and MultiCondition object in Design Mode: the Editor for the Conditions property failed when you attempted to add a child Condition.
  • FieldStateControllers in Design mode: the Editor for the Enabler property would not write out changes.
  • FieldSecurityValidator in design mode: Did not draw correctly.
  • ValidationSummary: Using the AddMessage() method would show your text after the client-side removes other messages from validators which the user corrected.

11/21/2011 Peter's Data Entry Suite 4.0.7 Update
Breaking changes
  • PageSecurityValidator now sets the DetectInjection property to true on ParameterRule, HiddenFieldRule, and CookieRule objects.
    DetectInjection is applied when these objects have their DataType property set to Ignore or String. The documentation previously said DetectInjection defaults to true, but the code defaulted to false. This not only corrects the documentation with the code, but chooses the more protective approach of enabling security.
    This is a breaking change for users who have defined these objects with DataType=Ignore or String, and do not want DetectInjection to be true. If your Rule object explicitly sets DetectInjection to false, you're code will not break. You should review your PageValidationSecurity controls for objects defined in their ParameterRules, HiddenFieldRules, and CookieRules objects. Cases to look for:
    • The DataType property is not assigned. It uses Ignore as its default.
    • The DataType property is assigned to Ignore or String.
    • The DetectInjection property is not assigned. Determine if you want to protect against SQL Injection and Cross Site Script injection attacks (recommended). If you do not, set this property to false.
  • The PageSecurityValidator's new DetectDatabaseElementNamesInQueryString property impacts query string parameters intended to accept strings, when a string it allows is also defined in the <databaselementnames> node of the master.config file.
    Look for any query string parameter that accepts a string type. If it should accept one of your database element names, set this property to false and use the ParameterRule object with its DetectInjection property set to true. DetectInjection applies a more complex algorithm to determine if a database element name is legal or not.
  • New property on PageSecurityValidator: DetectDatabaseElementNamesInQueryString. When true, look at the entire query string for any value defined in the <databaseelementnames> node of the master.config file and report an error if found. It defaults to true and may be a breaking change. See above.
    This property is in response to the lizamoon attack (starting in March 2011) which creates an update statement using table and field names it already extracted from a prior attack on your database's master tables:
    update [your table name] set [your field name] = REPLACE(and so forth)
  • The TextBox.DisablePaste property now works with FireFox.
  • The EnterSubmitsControlID property on TextBoxes and NativeControlExtender now support LinkButtons on FireFox.
  • DES Buttons offer MayMoveOnClick property but it was not supported when CausesValidation=false. It is now supported in that case.
  • The Alert shown by the PageManager.ShowAlertOnSubmit and PeterBlum.DES.Globals.Page.ShowAlertOnSubmit properties now supports the {COUNT} and {COUNT:singular:plural} tokens. They show the number of errors listed.

Bug Fixes
  • Internet Explorer 9 reported a javascript error when loading pages that used scripts associated with date and time data.
  • When using AJAX to preload features, the preload option "TimeTextBoxes" needed to load additional scripts when there was no DateTextBox also on the page.
  • When using AJAX with a CalculationController with an attached validator, the validator would not see the CalculationController after a callback.
  • When using the ConditionCalcItem on a CalculationController, and the condition was not one of the most common ones, a javascript error occurred.
  • When using the NumericTextBoxCalcItem on a CalculationController, and the textbox used was a PercentTextBox, the value from the textbox was not included in the calculation.
  • The PageManager.HintManager.PopupOnFocusDelay property was ignored.
  • When using the CombinedErrorMessages control with its NoErrorFormatter setup, the NoErrorFormatter would not always appear based on the setup.
  • When using the System.Web.UI.WebControls.RequiredFieldValidator with a DateTextBox, some cases had javascript errors.
  • When using native button controls with Medium Trust security on your app, a security exception may have occurred.
  • The ValidationSummary would draw a <br /> tag if there was HeaderText to show but no body (DisplayMode=None) and no footer. It left an extra line.
  • The PeterBlum.DES.Globals.Page.SubmitHidesOtherValidationGroups property was not considered during an AJAX callback. When its false, it should redraw other validation groups. It did not.
  • When the page gets style sheets by inserting <% PeterBlum.DES.StyleSheetManager.GetLinkTags() %>, it did not apply XHTML formatting to the resulting Link tag.
  • Spinners on various textboxes advanced by 2 instead of by 1 when clicking very quickly on most browsers.
  • Chrome and later Safari browsers positioned the popup calendar's toggle button much lower than it should be. This is because the style="align:top;" was used for all browsers and these two browsers worked differently. Now align:text-top is used for these browsers. This change also effects the popup toggle for the MonthYearPicker with the Calendar control.

8/2/2010 Peter's Data Entry Suite 4.0.6 Update
Telerik RadControls for ASP.NET AJAX users will need to replace the Telerik_Web_UI.config file after installing any version starting at 2009.2.821, due to some API name changes made by Telerik.
Get the updated file from the [DES product folder]/Third Party Support/Telerik RadControls/Telerik_Web_UI.config.
Copy it over the existing file in [web application]/DES/.
Restart the application.

  • Support of ASP.NET 4 issue where ClientIDMode=Predictable is setup on these controls, any container control, the page, or globally.
  • The Calendar's Expanded Day View can now be popped up by a click as an alternative to a mouse over. Set Calendar.ExpandedFormatter.PopupOnClick to true.
  • When your host uses a Medium trust mode, you can get a SecurityPermission exception referring to ConfigurationPermission. Add this entry to the <appSettings> section of your web.config file:
     <add key="DES_DisableHttpHandlerCheck" value="" />

Dynamic Data Enhancements
  • Reworked how to pass properties to FieldTemplates from DES.UIHintAttribute, DES.DynamicField, DES.DynamicControl, and DataFieldInPattern. It uses the same properties more efficiently and programmatic support is better. In addition, DES.DynamicField did not correctly support this feature until now.
  • New FieldTemplate for AJAX Control Toolkit (May 2009) users: Html_Edit.ascx. It uses the new HTMLEditor control.
  • Support for CategoryAttribute in your field-level business logic. Use categories to define scaffolding groups and to select NamedStyles in PatternTemplates. With NamedStyles, you can differentiate certain fields such as the "Name" field from others with a different style sheet by creating a Category.
  • ScaffoldColumnAttribute can specify scaffolding by mode: ReadOnly, Edit, and Insert.
  • Security roles supported. Includes the TableRestrictionAttribute and ColumnRestrictionAttribute for your metadata and NamedStyles can specify a role.
  • CombinedErrorMessage control using a PopupErrorFormatter will now refresh as errors change when the PopupView is already open.
  • When using the FSCOnCommand and MultiFSCOnCommand controls, the initial appearance of controls to change was unclear. Did the control establish them or not? Now it establishes them by default and offers the SetInitialAppearance property to change this behavior.

Bug Fixes
  • Internet Explorer 8 handled setting the "innerHTML" differently, preventing event handlers from being inserted once the page load is complete. This broke the ClientSideCreatesHTML property set to "FirstPopup" on any control that can popup. It also broke the close box on the Expanded Date View popup for the Calendar control.
  • Popup calendar had sizing issues when using the MultiMonthColumnCount property. The field with the month name was 2 pixels too wide. FireFox and Opera needed better sizing of the overall width to avoid months overlapping the right edge of the control.
  • When a TextBox using ValueWhenBlankCssClass is updated in an AJAX callback and it has an associated validator that changes the style of the textbox to show an error, the ValueWhenBlankCssClass was not shown after the callback until the user visited the field.
  • When the page is scrolled, Safari and Opera sometimes incorrectly positioned any popup if the popup is contained in a style="position:fixed" element
  • FireFox 3 would allow popups to extend beyond the visible area of the page. It should have shifted into the page, like the other browsers do.
  • The CreditCardNumberValidator was documented to have the CleanedUpNumber property. It is now available.
  • Input security Script Injection did not detect the <h1> - <h6> as HTML tags to validate.
  • In cultures that use ASCII 160 for the group separator character, validation of any numeric textbox may consider the letter "A" as legal in the number. Found with the Czech (cs-CZ) culture.
  • The CalculationController.LabelToken property did not work correct after a postback or when the token was "{0}".
  • When a DES TextBox has AutoPostBack=true and AutoPostBackValidates=false, it still attempted to perform client-side validation on the textbox prior to a postback.
  • The MultiSelectionCalendar allowed selections prior to the MinDate and after the MaxDate property values.
  • The CalculationController sometimes had a slight rounding error when using the Rounding mode of currency.
  • When the DateTextBox uses the RangeEndSetsMinDate property, it was incorrectly setting it one date too early.
  • On a MultiSegmentDataEntry control where segments are textboxes and TabOnMaxLength is true, sometimes moving to a segment that has the maximum text autotabbed over that segment.

11/24/2009 Peter's Polling Package 1.1.4 Update
  • Documentation reformatted. Installation directions improved.
  • Assembly supports partial trust environments
  • The question can now be positioned to the left of the answers by using the xQuestionToLeftOnEntryB and xQuestionToLeftOnResultsB properties.
  • The xRotatingPollsEntryOnlyB property is an expansion of the xRotatingPollsB property. When true, each vote is followed Entry mode showing the next question. It's basically a way to go through a series of questions one-by-one like a survey.
  • New event: PollCreating. Use it to update the Poll control’s properties or take another action immediately prior to when a poll record is converted into the content on the page. This event supplies you with the current view, poll record, and poll count amongst multiple polls shown, all in the Args parameter.
  • RecentPolls now identifies the record ID of the currently shown Poll within its xPollID property
Bug fixes
  • The Poll's PreRender event was not supported.
  • ASP.NET 2 legacy mode could sometimes prevent saving the value of a vote. The poll would re-appear in Entry mode after submission.

6/8/2009 Peter's Data Entry Suite 4.0.5 Update
Breaking Changes
  • For Input Security users. When the FieldSecurityValidator or PageSecurityValidator have their HtmlTagMode property set to IllegalExceptTags and their HTMLTags property set to "", the behavior has changed. Previously it treated all tags not declared in the <illegaltags> section of the config file as legal. Now it treats them all as illegal, which makes more sense. The HTMLTagMode and HTMLTags properties default to IllegalExceptTags and "" respectively, so if you are using their default values and you want to allow all tags not in the config file to be accepted, you must change HTMLTagMode to AllLegal.
  • For DES Dynamic Data Users. There is a major overhaul of PageTemplates and the DynamicDataManager control. The locations of the PageTemplates and FieldTemplates folders have changed as well. If you have customized the PageTemplate files, be prepared to migrate your changes into the new PageTemplate files.
  • The native ImageButton control and as a result, DES's ImageButton control, failed to fire their Click or Command event handlers when using FireFox (any version) if the browser could not load the image. They may have left ImageUrl unassigned, it had an invalid URL, or the server failed to retrieve the image. DES's ImageButton now fires the Click and Command event handlers in this case.
  • Recognizes the Google Chrome browser and works correctly both in scripts and appearance. The TrueBrowser class now identifies three separate values for various related browsers: AppleWebKit (the underlying technology for both Safari and Chrome), Safari, and Chrome.
  • LocalizableLabel has enhanced the AssociatedControlID property. It now works with an ID being in any ancestor naming container. Plus the new AssociatedControl property where you can assign a reference to the other control found in any naming container.
  • When using multiple validation groups, clicking on a submit button would not hide the validation errors associated with other validation groups. This could be distracting to the user since they will try to fix errors unrelated to the validation group. Now it clears those errors. If you like the previous way, set PeterBlum.DES.Globals.Page.SubmitHidesOtherValidationGroups to false in Page_Load.
  • When using the ExtraControlsRunThisAction property on a validator combined with the ChangeStyleOnControlsWithError property, controls in the ExtraControlsRunThisAction property would get their style sheet class changed. This behavior doesn't seem right and has been turned off by default. If you like the previous way, set PeterBlum.DES.Globals.Page.ChangeStyleOnControlsWithErrorIncludesExtraControls to true in Page_Load.
  • Two new javascript functions available to change the appearance of a validator: DES_UpdVal() and DES_HideVal().
  • When using the ShowAlertOnChange property (on PageManager or the Globals.Page object), it used to show the ErrorMessage property on the validator. The SummaryErrorMessage is usually more complete. So now it shows the SummaryErrorMessage by default (falling back to the ErrorMessage property when SummaryErrorMessage is blank). You can return to using only the ErrorMessage property by setting AlertShowsSummaryMessage to false in the PageManager or Globals.Page. It can be set globally with the DefaultAlertShowsSummaryMessage property in the Global Settings Editor.
  • New property on Calendar and MultipleCalendar: SelectedOtherMonthCssClass. Lets you assign a different style sheet class to day cells in the "other month" when using Multiple Month View. Without it, those day cells do not show any selection.
  • GZIP and DEFLATE compression plus better client-side caching is now supported by the file-based retrieval of scripts and style sheets. (You have setup the <add key="DES_GetFilesVirtualPath" /> in the web.config file. If you are using the HttpHandler which is the default, these features already exist.)
  • Your own style sheets can now be compressed and merged with DES's style sheets. See the topic "Support for your own style sheets" in the "Using Style Sheets" section of the "General Features Guide".
  • Any style sheet file that uses DES's compression and merge supports URL tokens "~/" and "{APPEARANCE}" within the url() token of the background and background-image styles.
  • Google Chrome browser fails to handle DropDownList.AutoPostBack=true when that DropDownList is attached to either a native or DES validator. Now you can attach a NativeControlExtender to the DropDownList and it will setup AutoPostBack in a way that works with Chrome, regardless of whether you want to validate prior to postback.
  • The ValueWhenBlank feature on textboxes now supports the Reset button. It establishes the correct text and style sheet depending on how Reset changed the textbox.
  • The TextCounter control now changes the style of the textbox when the length exceeds or drops below the maximum. It requires the Validator's ChangeStyleOnControlsWithErrors property is set to true. (Its set on the PageManager or PeterBlum.DES.Globals.Page object.) It will also hide the TextLengthValidator if its showing as the length is reduced.
  • Improved detection of javascript by running the test code very early. That prevents most javascript errors occurring on the initial page loaded from skipping the test code, and thereby making the postback think no scripts are running.
  • Within the Validator's NoErrorFormatter, its Text property now can use the "{IMAGE}" token to place the ImageUrl's image tag inside the Text.
  • AJAXManager now supports preloading the Spinner feature used by numeric and time textboxes.
  • TimeOfDayTextBox and DurationTextBox have a new property: CommandsFireOnChangeFunction. When OnChangeFunctionName is assigned, this determines if edit commands fire your onchange function. It allows for more interactive behavior when OnChangeFunctionName is used.
  • IE would cache scripts and style sheets separately for each folder identified in a URL. It now caches them once per site. (Associated with the DESGetFiles HttpHandler.)
  • There were cases where garbage collection could occur earlier and reduce the memory demand on the server that are now addressed.
Enhancements to DES Dynamic Data (Prerelease)
  • PatternTemplates introduced. PatternTemplates are perhaps the most important tool to creating web forms. They are User Controls that contain a block of HTML and various controls – including DynamicControls – that describe a pattern. Your ListView and FormView controls require much less setup because instead of writing the HTML and controls of a pattern, you include a PatternTemplate by specifying its name in a DynamicPattern control.
  • DynamicListView and DynamicFormView controls introduced. They subclass ListView and FormView to provide the ease of setup found in GridView and DetailsView. They let you fully control the HTML output by using PatternTemplates. As a result, the PageTemplate files are now using them instead of GridView and DetailsView. Now your PageTemplates can have their HTML customized through the PatternTemplates instead of creating a new PageTemplate file.
  • DynamicColumnTitle control introduced. Used in a columnar style interface to give column titles a sorting user interface.
  • DynamicControlPanel control introduced. This control expands upon the DataPager control from ASP.NET 3.5 to offer far more tools that manipulate the contents of your databound page. There are many types of pagers, sorting options, page size options, and editing buttons.
  • DynamicButtons control introduced. Generates the standard buttons used on databound controls like New, Edit, Save, and Cancel. Very flexible. You can set it up using properties or Templates.
  • DES.ScaffoldColumnAttribute introduced. It subclasses the native ScaffoldColumnAttribute, adding properties that allow ordering of the column, by column number, relative, and after a specified column name.
  • When a CheckBox or RadioButton control is disabled by the FieldStateController, if its parent HTML tag is a <td> without an id= attribute, everything contained in that table cell would be disabled. (A workaround is to assign an id= to the table cell tag.)
  • The Calendar control sometimes had its week rows overlap the right border in FireFox 3 and IE 7.
  • The MultiSelectionCalendar did not use the mouse over effect on day cells that also had the range hiliting effect.
  • These two client-side functions for DateTextBox did not work: DES_DTBSetMinDate() and DES_DTBSetMaxDate().
  • When a TimePicker has the time "0:00" (12 midnight), that value would be treated as "no selection" instead of the actual time. Affected PopupTimePicker, TimeOfDayTextBox with TimePicker and DurationTextBox with TimePicker.
  • When a popup was on top of an element whose style is position:fixed and the main window was scrolled, the popup was incorrectly positioned.
  • The MultiCondition and MultiConditionValidator had differences in how their client-side and server side evaluation functions worked when a child Condition returned "cannot evaluate". The server side code has been changed to match the client-side code.
  • The DecimalMode property on TimeOfDayTextBox and DurationTextBox did not allow entry of a decimal character when it was set to "TimeSeparator".
  • Design mode did not list MultipleRequiredControlsCondition in editors for the Enabler or MultiCondition.
  • The MultipleRequiredControlsValidator sometimes threw a NullReferenceException when populating its RequiredControlsToEvaluate property in the ASP.NET Declarative Syntax.
  • A SpecialDates style sheet on a Calendar's Day cell did not allow the style sheet for Today's Date to be applied. Today's date style sheet should have been merged.
  • When using the SlowDownManager of the Input Security module, an InvalidCastException sometimes appeared from the CheckForwarded_For_IP() method.
  • Validation ErrorMessage and SummaryErrorMessage properties that contain a single \ character would display two \ characters.
  • The MultipleRequiredControlsValidator reported the page is invalid on the server side when all controls it evaluates are Visible=false (such as hidden in a page of a Wizard that is not visible).
  • The DataTypeCheckValidator should support the ReportErrorsAfter property when the DataType="DateTime".
  • The LastSelectedDate property on MultiSelectionCalendar generated a stack overflow exception.
  • When MultiSelectionCalendar is in Range Mode, the hiliting and associated date range appearing in the Message Center would include or exclude one too many dates. Any click to apply that selection would still have the correct results.
  • When javascript is disabled and an illegally formatted number is entered into Integer, Decimal, Currency, or PercentTextBox, the DataTypeCheckValidator does not report an error, yet an attempt to get the number through any "Value" property on these textboxes threw a FormatException.
  • DES's HtmlButton and HtmlInputButton controls threw a TypeCast exception on postback from their OnServerClick event handler.
  • The "Now" command on the TimeOfDayTextBox set the attached DateTextBox one day ahead depending on the current time and timezone.
  • When the date format of YYYY-MM-DD is used on a RangeValidator's Minimum and Maximum, or on the CompareToValueValidator, or in the DateTextBox, certain time zones converted the string entered to the previous day.
  • When PeterBlum.DES.Globals.Page.MoreCultureInfo.AdditionalDateSeparators has two or more characters, client-side code failed to accept any of those characters in the DateTextBox. It would report validation errors instead of converting the separators to their default value. It worked correctly on postback.
  • Infragistics WARP technology now better supported by the AJAXManager. Scripts are more reliably loaded avoiding javascript errors.

9/20/2008 Peter's Data Entry Suite 4.0.4 Update
  • Validation support for Infragistics WebTextBox control
  • New property on MonthYearPicker: ReverseYearOrder. Used in Format=FewYears. It shows the latest year first and the earliest year last.
  • Support for production servers that impose the FIPS security rule where you see this exception: "Rijndael implementation is not part of the Windows Platform FIPS validated cryptographic algorithms". You will also need a new license file that is encoded differently. To get it, go to http://www.peterblum.com/getorder.aspx. Enter your email address and serial number. It will expose a checkbox "I am using either Peter's Data Entry Suite or one of its modules, and I have v4.0.4 or higher." Mark that to have FIPS compliant license files delivered. Replace current files with the new ones.
Enhancements to DES Dynamic Data (Prerelease)
  • New FieldGenerator class to let you control how automatic scaffolding works through the new IFieldGeneratorGuidance interface applied to your master page. There are extensive ways to customize the DynamicField list generated by automatic scaffolding, often eliminating the need to create a duplicate PageTempate in the CustomTemplates folder.
  • New FieldTemplates: DbImage (for binary columns containing images), Url (for strings that are Urls), UrlAsImage (for Urls pointing to images), DateAjaxCalendar_Edit (uses the Ajax Control Toolkit's CalendarExtendr), IntegerSlider_Edit (uses the Ajax Control Toolkit's SliderExtender), and three ways to display booleans (with checkbox, image, and label).
  • When the ToolTip for a DES button has a linefeed (\r\n) or multiple single quotes, a javascript error occurred.
  • Infragistics WebEditor controls that are added after an AJAX update did not get their "onchange" validation effects. They did correctly validate on the client-side when the user attempted to submit.
  • When using AJAX on a Validator whose DataType=Currency and it evaluates a native TextBox, if you don't have a license covering Peter's TextBoxes, it gave a javascript error.
  • XHTML validation error on the querystring parameters of the <script src='DESGetFiles.aspx' /> tag has been fixed.
  • When using the CalculationController with its RoundMode property set to Round5, some calculations caused values that get incorrectly rounded down when they should have rounded up.
  • When using AJAX with "Dummy" Calendar or MultiSelectionCalendar and you are using its ExpandedDateFormatter feature, a javascript error occurred as the page opened.
  • A javascript error occurred when using a calendar with the ExpandedDateFormatter in the following situation: the ExpandedDateFormatter is visible (popped up) and the user attempts to open anything else that pops up, such as the MonthYearPicker or ContextMenu.
  • When using a numeric TextBox with its ValueWhenBlank property set, if validation has the following settings, the user may be constantly confronted by alerts: PageManager.ShowAlertOnChange=true PageManager.FocusOnChange=true RequiredTextValidator on the textbox.
  • In FireFox, a textarea tag treats carriage returns differently than other browsers. The length of a carriage return is 1 character in FF and 2 in others. This affects TextCounter and TextLengthValidator (on the client-side) as they evaluate differently for the browsers. The code has been adjusted to make FF count each carriage return as 2.

7/7/2008 Peter's Data Entry Suite 4.0.3 Update
  • Prerelease of "DES Dynamic Data" is available in the Dynamic Data folder. This will become v4.1 when its finished (it will be a free update for v4 users).
    It delivers support for ASP.NET Dynamic Data and numerous enhancements to that system. Please give it a try and provide feedback so this software is correctly implemented.
  • Scripts and style sheets are now delivered using GZIP or DEFLATE compression on browsers that support it. This requires the DESGetFiles.aspx HttpHandler to be active.Most browsers support this. However, due to bugs in IE6's implementation, this feature is disabled on that browser.
  • New Property: AutoHintStyle. On all Date and Time textbox controls. Expands your control over the AutoHint feature, letting you pick from various styles, such as tooltip or hint.
  • New Property: AutoHintAppendsToHint. On all Date and Time textbox controls. Expands the AutoHint feature to allow the text assigned to the Hint property to be merged with the AutoHint text.
  • Calendar and MultiSelectionCalendar now can identify what invoked your OnSelectionChangedScript by testing the local variable vApply. If true, the Apply button was clicked. False when the selection was changed.
  • Scripts are now using the preferred standard of //<![CDATA[ as opposed to <!--.
Bug Fixes
  • The HintFormatter.HiddenOnError property should also take into account if the validator's NoErrorFormatter is displayed. It should not show the hint in that case as the goal of HiddenOnError is to avoid having both the validator's info and the hint on the screen at the same time.
  • When Validator.NoErrorFormatter.Mode is set to "Correct", it did not display the NoErrorFormatter if the first action the user took was to enter correct information. It appearred only if they edited the field a second time.
  • When a validator uses OverrideClientSideEvaluation=Callback and ReportErrorsAfter uses any form of "AllEdits", a javascript error occurred after the callback.
  • The resources files supplied for the String Lookup System were lacking "DESMisc.resx"
  • When using AJAX to preload a ValidationSummary with the PageManager.PreloadForAJAX-ValidationSummary property, or calling AJAXManager.PreRegisterForAJAX(ValidationSummary), a Javascript error still occured after the callback.
  • When using AJAX to preload a TextBox and the textbox uses the ValueWhenBlank properties, a javascript error referring to "DES_VWBInit" occured on the callback.
  • When using PageManager or DESPage.ChangeStyleOnControlsWithError and you make a validator invalid on the server side, the control with the error could get stuck showing the error style sheet even after it was fixed.
  • When using PageManager or DESPage.ChangeStyleOnControlsWithError, a RadioButtonList or CheckBoxList with RepeatLayout=Table will incorrectly show the error style sheet after the error gets corrected (no postback or callback involved).
  • When in an AJAX Callback, if a DateTextBox sets a property on either its PopupCalendar or Calendar child properties, a Typecast exception was thrown.
  • When in an AJAX Callback, if a control created during the callback needs different CultureInfo features on the client-side, they were not supplied. The control would not offer the correct culture info settings. In some cases, the control will generate a Javascript error.
  • The FieldStateController ignored changing its Enabled property during a postback if server side validation already occurred.
  • Script and style sheet files delivered by the DESGetFiles.aspx HttpHandler were not caching on the browser.
  • Third party controls that declare an <InitScript> tag in the <ThirdPartyControls> section of the custom.des.config file would fail to run that function if they are first loaded after an AJAX callback.
  • When using an AJAX Callback, server side validators that report an error did not reflect that error on the ValidationSummary or the alert shown when using PageManager.ShowAlertOnSubmit.
  • There was a licensing error demanding Peter's Profession Validation when you don't have that license and use any DES TextBox's AutoPostBack property.
  • When a hint's text included a carriage return character, a javascript error could occur.
  • PageManager control was missing a property to set the PreLoadForAJAX-CombinedErrorMessages property.
  • When using a CustomValidator without its ControlToEvaluate property assigned, a javascript error could occur during an AJAX callback.
  • When using a Panel with any DES TextBox controls and that Panel is Visible=false initially, if you set it to Visible=true during an AJAX callback, the DES textbox controls will not display although they should.
  • When using design mode in Visual Studio 2008, the Cancel button on the property editor for a Conditions property will crash VS2008.

5/12/2008 Peter's Data Entry Suite 4.0.2 Update
  • BREAKING CHANGE: The TextCounter now offers the NoLimitMessage property. It is used instead of the NormalMessage property when there is no maximum specified. The default text of the NormalMessage property has been changed to "{COUNT} of {MAXIMUM} characters". If you are using the default text on NormalMessage and you want the original text, assign it to "{COUNT} {COUNT:character:characters}".
  • New Validator (available with a Peter's More Validators license): RequiredSelectionValidator. When a selection is required on a control that is not textual or list. Supports ListView, DataIndex, DES's Calendar, MultiSelectionCalendar, MonthYearPicker, and TimePicker.
  • In ASP.NET 2 and higher, an HttpHandler is now used to deliver scripts and style sheets to the browser. It replaces the GetFiles.aspx file (although that remains as a backup solution.) The Web Application Updater will add an entry in the <httpHandlers> section of your web.config file. When using IIS 7, the <system.webServer> section will need an entry in its <handlers> section. It will be added by the Web Application Updater if the system.webServer section is present. You will need to add it manually if that section does not exist.
  • MultipleRequiredControlsValidator now supports CheckBoxes and RadioButtons.
  • New property: DefaultErrorFormatterSkinID on PageManager and PeterBlum.DES.Globals.Page. Validators whose ErrorFormatterSkinID property is set to "{DEFAULT}" will first look for a value in the DefaultErrorFormatterSkinID property. If assigned, it is used as the SkinID. This feature also changes the default value for a validator's ErrorFormatterSkinID from "" to "{DEFAULT}". It will have no impact until you explicitly change the DefaultErrorFormatterSkinID.
  • The ErrorFormatterSkinID and DefaultErrorFormatterSkinID properties now let you override properties that it declares by using a syntax like ErrorFormatterSkinID="MyTextFormatter {Display='dynamic'}".
    They also let you enter the standard names of the errorformatters, like "text" and "texterrorformatter" to select their default value without having a saved errorformatter template in the custom.des.config file.
  • The PageManager control now supports the following properties: ControlErrorCssClass, ListErrorCssClass, CheckBoxErrorCssClass, TextHiliteFieldsCssClass, and NonTextHiliteFieldsCssClass. (They were always available programmatically on the PeterBlum.DES.Globals.Page object.)
  • New event on PeterBlum.DES.Globals.Page: Use the BeforeValidation event handler to run code first, each time the DESPage.Validate() method is called.
  • The PeterBlum.DES.Globals.Page.PostPageValidationFunctionName property is used to call your own scripts immediately after page-level validation occurs, whether it was valid or not.
  • New property on FieldStateControllers: UpdateWhileEditing. Determines if the FieldStateController is triggered as the user types into a textbox that it uses to evaluate its condition. By default, it does not and only triggers when focus leaves the textbox. Set this to true to evaluate the FieldStateController with each keystroke.
  • New property on SpecialDates control: DayOfWeekConflictRule. Determines what happens when both a SpecialDayOfWeek and any other SpecialDate item share the same date. One of the two must be selected based on this rule.
  • The Enabled property of the Calendar control now will prevent changing the selected date when it is disabled. The FieldStateController will visually update the Calendar as it toggles the Enabled property.
  • On Date and Time textboxes, you can turn off the AutoHint feature but still get the tooltip setup with the text of the auto hint. Call the control's BuildDescriptionForHint() method in Page_Load. Make sure AutoHint is false.
  • New property on FilteredTextBox: UseKeyboardFiltering. Determines if the client-side filters out characters that are not supported by the datatype. This is usually left true unless you need to switch the control between unfiltered and filtered.
  • Web Application Updater automatically adds the <location path="DES"> tag to the web.config file. This is needed by sites using Forms Authentication.
  • Design mode speed in VS2005 and 2008 has been improved when there are a large number of DES controls on the design surface.
  • Design mode support for the Visual Studio/VWD command: "ASP.NET Non-Visual Controls". When unchecked, the following controls will be hidden from design mode: PageManager, NativeControlExtender, SpecialDates, all FieldStateControllers, and CalculationController. FYI: The command is under the View menu. If not found, you can add it using the Customize command.
  • Due to changes in RadControls for ASP.NET AJAX Q1 2008, the Telerik_Web_UI.config file has been updated. Copy the one from the [DES product folder]\Third Party Support\Telerik RadControls into the DES folder of your web application. This file will still work with Q3 2007 too.
  • Safari 3.1 did not handle clicks on popups correctly when the popup was on a scrolled web page.
  • The MonthYearTextBox would always assign this year to the date instead of the requested date when the ShortDatePattern was "d/MM/yyyy" or "dd/MM/yyyy".
  • The MultiSelectionCalendar's Select Month button did nothing when on December of any year.
  • Some cultures displayed "NaN" as the week row number on the Calendar and MultiSelectionCalendar.
  • When a CombinedErrorMessages control uses the PopupErrorFormatter, there was a javascript error if the page posted back and redrew with the control showing an error.
  • Only in v4.0.1: When AJAX is setup, you may get a NullReferenceException where the callstack includes "ControlInAJAXUpdate".
  • This error shown by ASP.NET AJAX in an alert box no longer happens: "The script tag registered for type 'ASP.page_aspx' and key 'DES_ClientScripts' does not contain any valid script tags."
  • When using the CombinedErrorMessages control within AJAX, a callback sometimes lost its ability to update validators after an edit. It still worked on a client-side submit.
  • The TimeOfDayTextBox and DurationTextBox did not handle their RoundUpMinutes property correctly.
  • When using the AJAXManager's PreLoadForAJAX features, it now loads script files and style sheets more intelligently in several cases.
  • The ValidationSummary did not appear when in a MultiView or Wizard, after the first view.
  • PopupTimePicker would always be visible so long as its BodyHeight property was assigned.
  • When showing the toggle button on a Date or Time control and you are using a FieldStateController to change the control's enabled state, postbacks sometimes resulted in the toggle button disappearing.
  • The ChangeMonitor failed to apply changes made to the current state on the server side after an AJAX callback.
  • On postback, an Integer segment within the MultiSegmentDataEntry control may report a validation error when it was correct.
  • When converting from VAM to DES, the Web Application Updater would convert these style sheet class names incorrectly: VAMMultiSegTextBox and VAMMultiSegContainer. They should be DESTBMultiSegTextBox and DESTBMultiSegContainer.
  • When using the app_GlobalResources folder but you need the String Lookup System to access a database, strings were not returned from the database.
  • When using the Expanded Properties Editor on the TimeOfDayTextBox, the TimePicker was not offered in the icons along the top.

2/23/2008 Peter's Data Entry Suite 4.0.1 Update
  • Validation support for these Telerik RadControls "Prometheus" web controls: RadEditor, RadComboBox, RadGrid, RadMenu, RadTextBox, RadNumericTextBox, RadMaskedBox, RadDateInput, and RadDatePicker.
    Run the Web Application Updater's "Install an update" option. It will eventually list third party controls. Make sure the first item is checked.
    See the Using Third Party Controls guide for details.
  • Web Application Updater: When you elect to manually install assemblies (for the GAC), it now adds the <assemblyBinding> and <add tagPrefix> tags.
  • New property: AcceptPeriodAsDecimalSeparator. On Decimal, Currency, and Percent TextBoxes. Lets cultures whose decimal separator is not a period to accept a period character in addition to their decimal separator. Great for numeric keypad entry of numbers.
  • URL properties that support images with pressed and mouseover versions now accept up to 3 URLs in this pipe (|) delimited format: normal|pressed|mouseover. When used, this overrides DES's sniffing out image files for pressed and mouseover versions. It also lets WebResource users support pressed and mouseover images.
  • EmailAddressValidator SmartTag now has properties for MultipleAddressesAllowed, DelimiterCharacter, and DelimiterAllowsSpace.
  • New property: ShiftKeyForRange on MultiSelectionCalendar. By default, users can hold down the shift key to extend a range. When you set ShiftKeyForRange to false, the shift key cannot create a range. A click with the shift key pressed will work the same as when it is not pressed.
  • Some new debugging tools let you explore AJAX, validation, the page, and more settings very quickly.
    See "Exploring the Current Settings" in the General Settings Guide.
  • ImageButton supports images for pressed and mouseover effects with the MultipleImages property and the ImageUrl property's support of the pipe delimited list of URLs.
  • Buttons support an alternative style sheet class when disabled with the WhenDisabledCssClass property. ImageButton also supports an alternative image when disabled with the WhenDisabledImageUrl property.
  • TextBox.ValueWhenBlankCssClass property now supports the "+" notation allowing its style to merge with the existing CssClass property instead of override it. This preserves styles from CssClass and only overrides the styles that are introduced in ValueWhenBlankCssClass.
Bugs fixed
  • When the CombinedErrorMessages control had its ErrorFormatter set to Popup, the popup did not appear when focus was on the field with the error. (It still appeared when the mouse was over the error icon.)
  • DateTextBox gave a javascript error when attempting to open the calendar if the ASP.NET declarative syntax had any properties in the <Calendar> section.
  • When using the Popup Hint feature and your hint contained a double quote, it would generate a javascript error. When the hint contained a \ character, it would not appear in the PopupView.
  • On production servers, this exception occurred occassionally: System.InvalidOperationException, " The instance is a duplicate of one already in the list." Stack trace shows: "at PeterBlum.DES.CachedCombinedFiles.Add(Object pValue)"
  • In cultures that use ASCII 160 to represent the thousands separator, that character was not accepted in the DecimalTextBox, CurrencyTextBox, and PercentTextBox. Includes Finland and Sweden.
  • For numeric textboxes. When using the MinValueToNative, MinValueToInteger, MinValueToDouble, or the max versions of the same, if you included the currency symbol, percent symbol, or thousands separator on the textbox, you would get this exception: "control.MinValue is not an integer or decimal value."
  • When a DateTextBox is initially disabled by a FieldStateController, upon getting enabled by the FSC, an attempt to popup the calendar failed with a javascript error.
  • DateTextBox and validators using DataType=Date would fail in cultures using upper ASCII and unicode characters. It had checked for A-Za-z as all letters, missing characters with umlats and for other languages.
  • Bulgarian culture adds extra text into its ShortDatePattern that prevented DateTextBox and validators using DataType=Date from working.
  • TimeOfDayTextBox and DurationTextBox incorrectly handled cultures where the TimeSeparator character is "."
  • When using ValueWhenBlankCssClass on a textbox with a RequiredTextField that was using PeterBlum.DES.Globals.Page.ControlErrorCssClass to change the textbox when it is in an error, ControlErrorCssClass should always override ValueWhenBlankCssClass. It did not consistently.

1/16/2008 Peter's Data Entry Suite 4.0.0
Initial release, January 2008.

12/12/2007 Peter's Date Package 2.0.5 Update
  • Support for RadControls "Prometheus" platform. Please see the instructions in the "Using these controls with AJAX" section of the User's Guide.
  • Support for Infragistics AJAX-enabled controls. The PDP controls can be inside of a WebAsyncRequestPanel or UltraWebTab. Please see the User's Guide for the section "Using Infragistics AJAX-enabled Controls" to set up this feature.
  • The ToolkitScriptManager control from the AJAX Control Toolkit is supported.
  • Some cultures use the single quote (') character in the LongDatePattern to preserve a literal string element. This is now supported.
Bugs Fixed
  • When the calendar is displayed in FireFox or other Mozilla-based browser, the borders for day cells where not shown so long as xWeekRowsCellSpacing=0 (the default). They are now shown.
  • The DateTextBox.xClientParserFunctionName property caused a javascript error when used after an AJAX callback.
  • When you have two DateTextBoxes setup in a range and both are using xAutoPopupOnFocusB=true, clicking in one textbox pops it up. Clicking in the second textbox popped up but closed almost immediately.
  • When the DateTextBox is using xAutoPopupOnFocusB="True" on a non-IE browser, the first click into the calendar after autopopup, closes the calendar. It should only close when selecting a date or clicking the Apply button.
  • When you have a MultiSelectionCalendar set up to call PreLoadForAJAX(), it generated a server side error on a callback.
  • MultiSelectionCalendar.GetSelectedDateRanges() method was not reliable and has been rewritten.
  • MultiSelectionCalendar ignored a click on the Month toggle button during December of any year.
  • When using the xExpandedDateFormatter property on a calendar that is within an AJAX update and the calendar is only shown after the callback, javascript errors occurred when attempting to show the ExpandedDateFormatter box.
  • If you clear any of the predefined ContextMenus then add a single command, you would get a javascript error when popping up the context menu.
  • When using Microsoft ASP.NET AJAX with VAM, Safari would not handle callbacks properly. It acted like AJAX features were never setup.
  • The DateTextBoxCompareValidator would not compare correctly when the current culture has a ShortDatePattern with a single M or D (m/d/yyyy would fail). Only affected the client-side evaluation. Server side worked.

12/12/2007 Professional Validation And More v3.0.11 Update
  • The ToolkitScriptManager control from the AJAX Control Toolkit is supported.
  • An AJAX Callback sometimes should restore the state of validators to show their error messages. Other times it should not. You can now control this with the PeterBlum.VAM.AJAXManager.Current.RestoreValidatorState property. It defaults to true, restoring validator error messages after the callback.
  • Additional defenses for recent Script Injection attack scenarios. Be sure to replace the master.config file in the \VAM\VISE Config Files folder with the new one.
  • String Lookup System now can retrieve a Connection String from the <connectionstrings> section of the web.config file as an alternative to defining the string within the custom.vam.config file. Use the ConnectionStringName property in the <StringLookup&;gt; section of the custom.vam.config file.

Bug fixes
  • When using the PeterBlum.VAM.Globals.Page.ShowAlertOnSubmit and you have a validator that uses OverrideClientScriptEvaluation = Hide or HideOnSubmit, the alert shown after submit did not include that validators summary error message.
  • The ASP.NET 2 control HiddenField was not fully supported. Validators that evaluated it would ignore its value.
  • The CountTrueConditionsValidator did not assign the correct value to the {COUNT} token when doing server side validation.
  • When using the NoErrorFormatter and Enabler properties of the Validator, if the Enabler disables the validator, the NoErrorFormatter showed its image. It should be hidden.
  • When using the ToolTip property of the RequiredFieldMarker or RequiredFieldDescription control and you have an embedded image, the tooltip was replaced by the alternative text when the mouse is over the image in Internet Explorer. It should show the ToolTip property value.
  • When using Telerik Prometheus v2007.2.918.0, a callback could report an "Sys.WebForms.PageRequestManagerParserErrorException" error through a client-side messagebox. This only happens on the first page request since the application starts up.
  • When a FieldStateController (or similar control) is in the row of a grid and that row is deleted because of a DataBind on postback, a javascript error sometimes occurred on the client-side.
  • When using Microsoft ASP.NET AJAX with VAM, Safari would not handle callbacks properly. It acted like AJAX features were never setup.
  • CurrencyTextBox, DecimalTextBox, and validators whose DataType property is set to Double or Currency had client-side errors when the decimal number had 7 or more digits after the decimal point.
  • When a page includes server side only validators that show their error messages in the ValidationSummary, the ValidationSummary uses its ScrollIntoView property and the submit button uses the MayMoveOnClick property, a click on the submit button when the page is valid may not submit.
  • When using the Button's DisableOnSubmit property and that button is created within an AJAX Callback with its Enabled property set to false, it would be enabled when displayed.

6/17/2007 Professional Validation And More v3.0.10 Update
  • Support for RadControls "Prometheus" platform. If using RadAJAX, just call the PeterBlum.VAM.AJAXManager.UsingRadAJAX() method but pass in the ScriptManager instead of the RadAjaxManager.
  • Support for Infragistics AJAX-enabled controls. The PDP controls can be inside of a WebAsyncRequestPanel or UltraWebTab. Please see the User's Guide for the section "Using Infragistics AJAX-enabled Controls" to set up this feature.
Bugs fixed
  • Broken in 3.0.9: The Group property on individual validators failed to provide server side validation when it included the pipe character ("|").
  • If you explicitly called PeterBlum.VAM.Globals.Page.ValidateGroup(), it would not properly update the ValidationSummary of the same group name.
  • When using AJAX to manage DetailView control that contains VAM controls, a javascript error occurred if any VAM controls were outside of the AJAX call and located earlier on the page.
  • When using the CombinedErrorMessages control with a validator whose ErrorFormatterSkinID is setup, the skinID would allow the validator to show its error message instead of just letting the CombinedErrorMessages control do it.
  • When using AJAX, the disable on submit feature (Button.DisableOnSubmit) sometimes buttons disabled. This was a timing issue where the AJAX transaction was faster than 0.02 of a second.
  • When AJAX updates validators that are showing their errors on the page, those validators would hide their errors as they were reloaded. They now restore to their state prior to the callback.
  • In Visual Studio 2005 design mode, if a validator was within certain controls and you visually resized the control, you would get an error.
  • When using a CalculationController that has a ConditionCalcItem within an AJAX callback, a javascript error occured after the callback.
  • When using the validator's Blink feature, if validators are blinking and a callback occurs, a javascript error may occur (timing issue).

3/27/2007 Peter's Date Package v2.0.4 Update
  • Support for v1 of MS ASP.NET AJAX.
  • New client-side functions for the MultiSelectionCalendar: MSC_GetRange() and MSC_GetSelectedCount(). MSC_GetRange gets either the lowest or highest selected date. MSC_GetSelectedCount() gets the number of selected items.
  • MultiSelectionCalendar has a new property, xUnselectOthersFirstB. When true, it always unselects other dates when the user attempts to make a new selection. It does not toggle dates. Use it to enforce a rule where you permit 1 day, 1 week, or 1 month, but no other types of ranges.
  • Support for subclasses of the MS ASP.NET AJAX controls: ScriptManager and UpdatePanel in the AJAXManager.UsingMicrosoftAJAX() and RegisterUpdatePanel() methods.
  • MonthYearTextBox now supports the xDateFormat property, allowing abbreviated and long months.
Bugs fixed
  • MonthYearTextBox assigned the wrong min-max date range to its popup MonthYearPicker. It was off by one month.
  • MultiSelectionCalendar can report a javascript error when the mouse passes over it if TrueBrowser.xSupportsCalendarB=false.
  • Some cultures put the AM/PM Designator before the time, such as in Korea, where the LongTimePattern is "tt hh:mm:ss". The TimeOfDayTextBox now supports that positioning of the AM/PM Designator.
  • When using the SpecialDates control within MS ASP.NET AJAX RC 1 or later, callbacks invoked by the UpdatePanel did not get updated SpecialDate data.
  • When the DateTextBox has today's date outside of the range of xMinDate and xMaxDate and the user pops up the calendar with an empty datetextbox, it shows the month that contains today's date. While that is normally fine, when today's date is at least one month outside of the range, the popped up month will be blank. It now adjusts to show either the first or last month of the range.
  • When using VS2005 with its absolute positioning feature in design mode, you could not drag most of the controls to position them.
  • When using xShowWeekendDaysB=false in the DateTextBox's popup calendar, the weekends were still shown, except in the day of week header.
  • The MultiSelectionCalendar did not preserve the xSelectedDates property in the ViewState. This affected it when it was made invisible then restored to visibility, such as in a Wizard control. Since the xSelectedDates property consumes a larger than normal amount of the ViewState (given an extensive list of attached dates), this data is only written into the ViewState when the control is invisible. It has no impact when visible.
  • When the MultiSelectionCalendar was made invisible then restored to visibility through a postback, this exception would occur: "The hidden field [ID]_SelDates is missing or has been tampered with."
  • When using the PopupEffect and the control has a style sheet class that defines a filter style, a javascript error occurred.
  • When using VAM's DataTypeCheckValidator on a TimeOfDayTextBox that is connected to a DateTextBox, the client-side validation would allow times above 24 hours. It should not consider that a valid time of day.
  • The MonthYearTextBox had the xAutoPopupOnFocusB property. It should not be on that control. If assigned, it would cause a javascript error when focus is set to the MYTB.
  • Setting the property DateTextBox.xPopupCalendar.xUsePopupEffectB to false did not disable the effect.
  • When the TimePicker has only one time value, a javascript error occurred.
  • In VS2005, if you edit the PopupCalendar control's xCalendar property in the Properties Editor, the contents between the start and end <date:PopupCalendar> tags output the wrong info: definitions of a label, image, and button.
  • When using the TimeTextBoxCompareValidator and you forget to assign the ControlToCompare property, a client-side error may occur.
  • Introduced in 2.0.3: When the DateTextBox used xDateFormat of Abbreviated or Long, there could be clean side validation errors on a valid date. Only occurred when the xDateTimeFormatInfo.LongDatePattern contained "dddd" or "ddd".

3/25/2007 Professional Validation And More v3.0.9 Update
  • Support for v1 of MS ASP.NET AJAX.
  • MultiSegmentDataEntry control now displays its Text and TextNoSeparators properties in the design mode tool for setting up databindings. (These properties now have the BindableAttribute.)
  • The SelectedIndexValidator and SelectedIndexCondition now correctly support matching the Index in a multiple selection listbox. Previously they only matched to the first selected listitem.
  • Support for subclasses of the MS ASP.NET AJAX controls: ScriptManager and UpdatePanel in the AJAXManager.UsingMicrosoftAJAX() and RegisterUpdatePanel() methods.
  • Support for Telerik RadMenu v4. See the Using rad controls Guide.pdf in [VAM Product folder]\Third Party Support\Telerik r.a.d. controls. If you update to Telerik RadMenu v4, you must modify VAM to use a different assembly and new setup instructions.
Bugs fixed
  • If an IgnoreConditionValidator or ValidationSummary.AddMessage() call added an error message to the ValidationSummary during an AJAX callback, that error message would remain in the ValidationSummary after later postbacks. It should be removed (have a life of one callback.)
  • CurrencyTextBox reported validation errors with the DataTypeCheckValidator when using cultures that have a non-breaking space character (ASCII 160) as the thousands separator. This includes fr-CA and sv-SE.
  • Introduced in 3.0.8: Some Properties Grids that offer a pick list of controls found on the page would have a blank list.
  • The MultiSegmentDataEntry.TabOnEnterKey property was not supported on DropDownListSegments. It is now.
  • Using the FSCOnCommand and MultiFSCOnCommand controls: When the FieldValue or InnerHTMLState properties are assigned to a textual value and that value matches the initial value of the ControlIDToChange, they were ignored. They should always apply their value.
  • On pages with validators, the form tag's onreset attribute would grow with each post back. The same script was getting merged over and over.
  • The Group property on validators did not work correctly in ASP.NET 2 when the validator was in a nested Naming container.
  • When the Group property was used on an IgnoreConditionValidator with the "+" token, it would throw an exception at runtime.
  • When a CombinedErrorMessages control uses the NoErrorFormatter with the Mode of Validated and there are several on the page, a validated field showed the NoErrorFormatter to the user on all of the CombinedErrorMessages controls.
  • When a validator contains a "runtime token" in its SummaryErrorMessage but not in its ErrorMessage, the ValidationSummary did not convert that token into its value. It stayed the token.
  • When using the Button's DisableOnSubmit property with an AJAX update, buttons that were disabled prior to submit are re-enabled after postback. They should have remained disabled.
  • When using the PeterBlum.VAM.Globals.Page.RegisterCallbackControl() method, the Group property was ignored. It always used the group "".
  • MultiFieldStateController and MultiFSCOnCommand ignored the Enabler property.
  • When using the Web Application Project feature of VS2005 to develop a web application, graphics and style sheets did not get applied in design mode.
  • In some cases, when a VAM control is searching for a control by its ID and that control is in an ancestor NamingContainer, it would not be found.

1/2/2007 Professional Validation And More v3.0.8 Update
  • Support for Microsoft ASP.NET AJAX Release Candidate 1.
  • VAM's TextBoxes now support the TextMode=Password when using the TabOnMaxLength property.
  • When using the AJAXManager.RegisterUpdatePanel() method with multiple UpdatePanels, the first UpdatePanel's UpdateMode must be set to Always or else other panels will not refresh their scripts, breaking them after a callback. The RegisterUpdatePanel() method has been enhanced to automatically set the first UpdatePanel to UpdateMode=Always.
  • When a VAM TextBox uses the ValueWhenBlank feature, previously validators needed to do extra setup to ignore the ValueWhenBlank in the textbox. Now its automatic. Your RequiredTextValidator no longer to specify the ValueWhenBlank in its UnassignedValues property and others do not need to establish an Enabler object. (If they continue to do so, it is harmless.)
  • Support for Infragistics WebGrid from their 2006 releases. There was a change to their code that broke my existing support. VAM has updated UWGClasses code files ([product folder]\third party support\Infragistics WebGrid). Replace the current file in your web app with the latest. It will continue to work with older versions of WebGrid. In addition the Connect() method now optionally allows nudging the position of the validator with pXOffset and pYOffset parameters. These are documented in "Using Infragistics WebGrid Guide.pdf".

Bug fixes
  • Better support for Internet Explorer 7. Prior to this release, some client-side features would work differently from IE 6.
  • AJAX/Callbacks: When using AJAX callbacks with a VAM Button or ImageButton, CausesValidation was always treated at true, even when it was false.
  • AJAX/Callbacks: When using the radAJAXPanel with the AJAXManager.UsingRadAJAX() method, callbacks did not work for FireFox and other Mozilla browsers.
  • AJAX/Callbacks: When a FieldStateController is used to change visibility inside of an MS AJAX UpdatePanel, it cannot make the element visible after a callback.
  • AJAX/Callbacks and ASP.NET 2.0 only: when using Server.Transfer to move away from a page that you were using the AJAXManager would result in a javascript error on the destination page.
  • AJAX/Callbacks: After an AJAX callback, any validator that has a SummaryErrorMessage did not show that error message in a ValidationSummary that appears later on the page. It either showed the ErrorMessage property or if that property was blank, it was not shown.
  • AJAX/Callbacks: When using a MultiConditionValidator or MultiCondition object with an AJAX callback on the page, the callback will result in a client-side Stack Overflow error.
  • AJAX/Callbacks: When using Atlas and the page has Peter's Date Package controls using VAM's validators, the javascript for any VAM controls involved in the callback would not be setup. (It appears to be a bug in Atlas but VAM has a hack to avoid it.)
  • Introduced in 3.0.6: When using PeterBlum.VAM.Globals.Page.RegisterKeyClicksControl() and there is no VAM textbox on the page, a javascript error occurred.
  • Introduced in 3.0.6: When using the radMenu or radTabStrip control (from radControls) with VAM, the client-side script never stopped an action due to an invalid validator.
  • Introduced in 3.0.6: When using any VAM TextBox with the CustomKeyDownFunctionName or CustomKeyPressFunctionName properties, the user would get a javascript error when typing into the textbox.
  • Introduced in 3.0.6: When the CalculationController or any type of FieldStateController is in a FormView control, design mode will show an "Object reference not set to an instance of an object."
  • The HyperlinkErrorFormatter needed to support the restoring animated GIFs after you clicked it. (Expansion of the feature added in 3.0.7.)
  • When using the ValidationSummary or PeterBlum.VAM.Globals.Page.ShowAlertOnSubmit features on a page with multiple validation groups, if a MultiConditionValidator is in one of those groups, it's error message could appear in the ValidationSummary or alert of the wrong group.
  • Found and fixed a memory leak connected to the "ValidatorAction" and "ErrorFormatter" class.
  • When these controls are added into an ASP.NET 2 CompositeControl class, any property that drops down to show a list of controls already on the page would throw a NullReferenceException.
  • When the page has javascript disabled (PeterBlum.VAM.Globals.Page.JavaScriptEnabled=false), several AJAX features still output their scripts.
  • ASP.NET 2 only: When the VAM LinkButton uses the WebForm_DoPostBack() function for its onclick event, it generated script errors when clicked.

1/2/2007 Peter's Date Package v2.0.3 update
  • Support for Microsoft ASP.NET AJAX Release Candidate 1.
  • The MultiSelectionCalendar offers these new properties, xFirstSelectedDate and xLastSelectedDate, to return the first and last dates in the selected dates data.
  • The MultiSelectionCalendar offers the GetSelectedDateRanges() method to return all selected date ranges found within the selected dates data.
  • The DateTextBox's Custom Parser now can indicate that the value passed is illegal and should not be accepted by returning false.
  • New javascript function, MSC_SetRange, is available on the MultiSelectionCalendar. Use it to add your own buttons near the calendar that also can select, unselect or toggle a range. The MultiSelectionCalendar control introduces a related method, GetSelectRangeScript(), to easily create calls to MSC_Range.
  • New javascript function, MSC_GetLastDateClicked, is available on the MultiSelectionCalendar. Use it to return the date of the last cell that was selected or unselected.
  • Previously, you could not get the posted back selected date value from CS_Calendar.xSelectedDate inside Page_Load(). Now you can.
  • Better support for alternative HttpHandlers including SharePoint.
  • Added the event SpecialDates.OnReviewSpecialDateItem. It is called for each Special Dates item object that was added through databinding. It allows you to further modify these objects.
  • The Special Date item and TimeRow classes (used by SpecialDates) now offers the property xDataSourceRow. It is setup when databinding to contain a reference to the Row object that provided the data used to create this object. You can use it in the SpecialDates.OnReviewSpecialDateItem event to modify the Special Date item and TimeRow object with data that isn't directly supported by the databinding features of SpecialDates.
  • The CS_Calendar.xDayCellFormatter now offers the property xTooltipTemplate. Use it to determine the contents of the tooltip shown on date cells, or to remove that tooltip.
  • The CS_Calendar.xDayCellFormatter and xExpandedDateFormatter offer a new property on their xDescriptionFormatter, xBody. It defines the formatting for the body of the cell to allow extensive customization.

Bug fixes
  • When using the radAJAXPanel with the AJAXManager.UsingRadAJAX() method, callbacks did not work for FireFox and other Mozilla browsers.
  • Better support for Internet Explorer 7. Prior to this release, some client-side features would work differently from IE 6.
  • When VAM is also running, CS_Calendar would not display the SpecialDates after a postback, on the initial month shown. It would update if you moved to another month.
  • Text entry into the DateTextBox should have permitted the date separator character when using xDateFormat=Abbreviated or Long. Now it does.
  • Use of the CSC_GetDateString() function always failed with a javascript error.
  • When the DateTextBox is disabled through the FieldStateController or other client-side code, clicking the calendar button still opened the calendar, often with dates showing 99s.
  • When using the TimeRows feature of SpecialDates to show time rows in the calendar, the TimeRows.xCssClass property was ignored.
  • MultipleSelectionCalendar with the Toggle month button available selects the wrong dates when pointing to a calendar showing December.
  • When these controls are added into an ASP.NET 2 CompositeControl class, in the Properties Editor, any property that drops down to show a list of controls already on the page would throw a NullReferenceException.
  • When using the UnselectableDatesValidator with an unselectable date that has no value in its xLabel property, the server-side generated ValidationSummary will omit its error message when UnselectableDatesValidator.xNoLabelErrorMessage is blank.
  • When using PDP with VAM through the PeterBlum.PDPtoVAM.dll assembly, callbacks could fail with javascript errors when the PDP controls are first added to the page after the callback.
  • When using the MultiSelectionCalendar with xWeekendBackground setup, a click on a weekend date to select did not visually show that selection.
  • When DateTextBox.xDateFormat is Abbrev or Long, if the xDateTimeFormatInfo.ShortDatePattern is a different order for D/M/Y compared to LongDatePattern, there would be validation errors.

10/31/2006 Peter's Date Package v2.0.2 Update
  • Support for Microsoft's AJAX Library (the beta versions of "Atlas"). Due to some breaking changes between Atlas and the AJAX Library, Atlas users must use a slightly different approach for using Peter's Date Package controls inside the UpdatePanel.
  • CS_Calendar includes a new property: xMultiMonthFullSpecialDateFormattingB. When using SpecialDates to format date cells, this determines what happens to date cells shown on one month but a part of another month that is also shown. When false, those cells do not use the SpecialDates formatting. When true, they do. In previous releases, the calendar does not show the formatting.
  • BREAKING CHANGE: SpecialDates has a new property, xHTMLEncodeDataFields. It is only used when reading from a DataSource. When true, it applies HTMLEncoding to all string-type values. It defaults to true. Set it to false to embed HTML tags and characters found in the data source into the page. If you previously set this up with HTML in your data source, you MUST set xHTMLEncodeDataFields to false.
  • When reading from a DataSource, all string types will have embedded carriage returns and line feeds converted into the <br /> tag automatically. Note that the xHTMLEncodeDataFields property does not have any affect on this.
  • UnselectableDatesValidator did not support embedded web controls for its error message. It now does.

Bug fixes
  • The textbox controls ignored the TabIndex property.
  • When the TimePicker is used inside of a naming container other than the Page object (such as a UserControl or form using a MasterPage), after a postback, a javascript error occurred. This affected the TimeOfDayTextBox and DurationTextBox, PopupTimePicker and TimePicker.
  • When the first DateTextBox or MonthYearTextBox on the page has xShowPopupB=false and any other on the page has xShowPopupB=true, the popup calendar would not appear. (A javascript error occurs when you clicked on the toggle button.)
  • When the Calendar is using multi month view, xAutoPostBackOnSelectionChangeB=true, and is involved in an AJAX callback, after the callback completes, the calendar changed the first viewed month to the month you clicked in. It should not have changed the viewed months.
  • When using the calendar's xDayCellFormatter, you can use tokens like {LABEL} and {DESC}. These tokens were not supported in the xDayNumberFormatting property or the Custom formatter's xOpeningHTML or xClosingHTML properties. Now they are.
  • When using the SpecialDates control with TimeRows defined, if a TimeRow has no data to display, a javascript error could occur.
  • The Hungarian culture (id=hu-HU) provides a ShortDatePattern with a period followed by a space as the date separator. This caused data entry errors in the DateTextBox. Now the code will eliminate the space, limiting the separator to just the period. This fixes the errors.
  • When using the TimeOfDayTextBox and a TimeOfDayValidator, it would not report an error when the hours were 24 or higher. The addition of the TimeOfDayMinMaxValidator would report the error but with a TimeOfDayTextBox, that should not be needed to catch times exceeding 24 hours.

10/31/2006 Professional Validation And More v3.0.7 Update
  • Support for the Microsoft AJAX Library Beta 1. This provides compatibility when using the UpdatePanel control. Follow the directions in the "Using these controls with AJAX" in each User's Guide.
  • VAM's LinkButton control now offers the MayMoveOnClick property that was introduced on the other Buttons in VAM 3.0.6. It has a limitation: it doesn't work on any Mozilla-based browser or any that do not offer a click() method on the <a> tag.
  • The CharacterValidator, CharacterCondition and FilteredTextBox offer several new properties that categorize related groups of characters. They are DiacriticLetters (including ASCII and UNICODE), Punctuation, MathSymbols, CurrencySymbols, EnclosureSymbols (like brackets), and VariousSymbols. They reduce the need to set up lists of characters in the OtherCharacters properties.
Bug fixes
  • After an AJAX update, any IntegerTextBox, DecimalTextBox and CurrencyTextBox that was included in the update lost its capability to reformat when the user made an edit.
  • When no validators are defined, a page that uses VAM's set focus to next control capability, found in VAM's TextBoxes and MultiSegmentDataEntry control, did not advance to the next control.

10/22/2006 Professional Validation And More 3.0.6 Update
  • All controls have been enhanced to work within various AJAX frameworks, including Microsoft Atlas, radAjax, and MagicAJAX. Configuration is required to get these controls to work, including calling a method on the new PeterBlum.VAM.AJAXManager object and setting the InAJAXUpdate property on each control. Detailed steps are provided in the "Using these controls with AJAX" section of each User's Guide.
  • Internet Explorer normally stops animated GIFs as soon as the form.submit() function runs. A clever hack found in this forum posting http://forums.asp.net/thread/1381507.aspx solves that and has been implemented in VAM. It will run when any code validates as the page is submitted. VAM Buttons that have CausesValidation=false will also run submission. For any other situation, write javascript code to call VAM_Reanimate(); in your onclick event that submits the page.
  • New property on VAM's Button and ImageButton: MayMoveOnClick. When true, it installs code that prevents having the user to click twice on the button to submit the page, if the button moved after the mouse down on the control.
  • The following properties on PeterBlum.VAM.Globals.Page have additional functionality: TextHiliteFieldsCssClass, NonTextHiliteFieldsCssClass, ControlErrorCssClass, ListErrorCssClass, and CheckErrorCssClass. Previously they always replaced the existing style on the associated control. That would defeat styles that contained width and height settings. Now you can use a "+" character before the class name and it will preserve the original class's styles. It effectively merges the two classes together.
  • BREAKING CHANGE. The EmailAddressValidator and condition now prevent any additional text after a valid email address unless you set the property AllowExtraText to true. Previously it always allowed extra text.
  • Visual Input Security now knows to ignore the hidden field "__EVENTVALIDATION" which is added in ASP.NET 2.0. "__EVENTVALIDATION" is another security measure within ASP.NET and has its own validation system.
Bugs fixed:
  • XHTML compliance fix for ASP.NET 2.0. ErrorFormatter.ImageAlign property did not generate XHTML compliant code.
  • The CountTrueConditionsValidator's server side evaluation would incorrectly count a condition that evaluated as "Cannot Evaluate". It should not have counted it.
  • The FSCOnCommand and MultiFSCOnCommand controls can cause a NullReferenceException on a postback that attempts to validate.
  • When using a RequiredListValidator or RequiredListCondition with a RadioButtonList and the UnassignedIndex property is used, it ignored the value of UnassignedIndex in client-side validation.
  • The ABARoutingNumberValidator should have reported an error when you enter '000000000'. It did not.

9/12/2006 Peter's Date Package v2.0.1 Update
  • The MultipleSelectionCalendar now interactively highlights day cells that are going to be selected in range. If you click on toggle week, day of week or month, it will highlight cells too. This behavior is the default. If you don't like the color choices, change them in the xHiliteRangeSelectColor and xHiliteRangeUnselectColor properties.
  • Support for MagicAJAX, a free AJAX framework.
  • Extensions to the AJAXManager to support a new category of AJAX products, from which MagicAJAX support was created. It adds the new AJAXSystemType, GetScriptsAtEnd. It provides you with additional options when attempting to get a third party AJAX system to work.
  • When using Multiple Month View in the Calendar and there are date cells to be formatted by the SpecialDates control, v2.0.0 did not use the SpecialDates data when those Date Cells were in the "other month" cells of the current month. This rule exists so that two months don't show identical info. This rule has been modified so that the first month will show special dates from the earlier month and the last month will show special dates from the later month.

Bug fixes
  • The PetersDatePackage.dll generated a Security Exception when placed into a site that has security restrictions through Partial Trust. This was due to the Best Order button appearing in VS.net's Properties Window. The button has been removed, allowing you to deploy the PetersDatePackage.dll. The Best Order button still remains part of the Expanded Properties Editor dialog box. You can still get security exceptions for other reasons in a Partial Trust Environment. See "Installing into a Partial Trust Environment" in the Installation Guide.
  • The MultipleSelectionCalendar selected one date in the next month when using the toggle Day Of Week button in some cases.
  • ASP.NET 2.0: When using the <%= PeterBlum.PetersDatePackage.CommonFunctions.GetStyleSheetLinkTags(Page) %> tag and the <head> tag does not contain a runat='server' property, no style sheets were added at runtime.
  • The Week Rows area of a calendar sometimes positioned its right edge incorrectly. It may have been far to the left of the border or crossed over the border. This problem depended on the browser. Only IE worked correctly.
  • In IE for Windows, the month change buttons on the right side of the calendar had a bigger distance to the calendar's border than the left side. Same with buttons in the footer. They should have been equal distances.
  • In Safari, the Multi Month View did not draw in any month except the first. It showed the days of the last month in the first month's position.
  • In most browsers other than Mozilla/FireFox, the calendar did not have a border along the top row of Day Cells, separating them from the day of week names. This happened when the xWeekRowCellSpacing property is "0". It now has a border.
  • Certain versions of Opera and Safari positioned the popup calendar incorrectly (usually to far left and up). While its not 100% perfect now, they do position better in most cases.
  • When typing into the DateTextBox and xDateFormat is Abbreviated or Long, if the user typed "/", the context menu appeared. It should not because the "/" character should be allowed for date entry. In addition, selecting menu commands at that time may have generated a javascript error.
  • When both the DateTextBox and MonthYearTextBox are on the page, popup the MonthYearPicker on the MYTB and click its OK button. It gave a javascript error.
  • If the TimePicker had an empty xItems collection, it threw this exception: "Do not call OutputScriptInRender unless you call OutputScriptInPreRender from the OnPreRender method.".
  • When using these controls in AJAX and you called the PreLoadForAJAX(), if they were using any of the PopupOnMouseOverB properties, a javascript error appeared as the page is loaded.
  • When the calendar is shown and has a xMaxDate setting, the date cell associated with xMaxDate did not have a right border when xWeekRowsCellSpacing=0 on IE.
  • When using Multiple Month View in the Calendar and there are date cells defined as unselectable by the SpecialDates control, the user could still select those dates if they were shown as "other month" dates.
  • Atlas (at least June 2006 CTP) interfered with the context menus, showing the browsers context menu on top of PDP's.
  • When the MonthYearTextBox is on the page without any DateTextBox or Calendar also there, when xAllowMonthNames is "Show", a javascript error occurred after the user entered a valid date.
  • When the DateTextBox has its popupcalendar set with xCallbackOnMonthViewChangeB=true, it did not fire the OnMonthViewChanged event and collect new data from the SpecialDates control.
  • When CS_Calendar or MultiSelectionCalendar is Visible=false on a postback, it threw an exception describing a problem with a hidden field.

9/11/2006 Peter's Polling Package v1.1.3 released
  • In Entry View, it may help to start the list of answers with a different item to make sure users aren't just clicking on the first one. Set the new property xRandomizeEntriesB to true to start with a random answer.
  • In Results View, you can now sort the results by the total votes, with the highest votes at the top. Set the new property xSortAnswersByVotesB to true.

Bug fixes
  • When the RecentPolls control was added, design mode showed the error "" until you setup the <xPolls> property.

8/6/2006 Professional Validation And More v3.0.5 Update
  • Buttons that cause an AJAX callback, like the radcallback callbackButton, can validate first by using the PeterBlum.VAM.Globals.Page.RegisterCallbackControl.
Bugs fixed
  • When the VAM buttons are used in the Wizard control's navigation templates and they use the DisableOnSubmit property, a javascript error occurred when the page was submitted.
  • When using the {MINIMUM} or {MAXIMUM} tokens on a RangeValidator with DataType="Double", a value smaller than 0.00009 was represented as a string in scientific notation.
  • The ReadOnlyCondition did not provide server side evaluation correctly on any of these TextBoxes: FilteredTextBox, IntegerTextBox, DecimalTextBox, or CurrencyTextBox.
  • ASP.NET 2.0 only: The new ASP.NET 2.0 HiddenField webcontrol was not supported by validators that already supported the older style <input type='hidden' runat='server' /> control.
  • When in a Partial Trust environment and you GET the ErrorFormatter object from a Validator's ErrorFormatter property, it threw a SecurityException.
  • When using the Visual Studio 2005 built-in web server with Visual Input Security, the Security Analysis Report threw an InvalidOperationException, "Failed to map the path '/' ".
  • Server-side memory leak found in the ErrorFormatter object has been corrected.
  • Several client-side memory leaks found in Internet Explorer and have been fixed.
  • When using a MultiConditionValidator with an UnwantedWordsCondition in its Conditions property, the Properties Editor threw a Typecast exception.
  • When a FilteredTextBox has only these properties set to true: Enter and Exclude, it does not exclude the Enter key.
  • ASP.NET 2.0 only: When you call a page with VAM controls from a custom HttpHandler, it threw a NullReferenceException even if you called PeterBlum.VAM.Globals.UsingAltHttpHandler.

8/6/2006 Peter's Date Package 1.1.12 Update
  • Added the CLSCompliantAttribute.
Bugs fixed
  • DateTextBox.xDateBindable, TimeOfDayTextBox.xDateTimeBindable, and CS_Calendar.xSelectedDateBindable needed to assign a blank date when the BindableMode is TwoWay or SqlType and the DateTime that you pass in is the minimum for a SQL date (1/1/1753).
  • The stand-alone PopupMonthYearPicker control continued to use the Month and Year value that the user selected. It needed to revert to the initial values.
  • When the xDateTimeFormatInfo.ShortDatePattern is "d/MM/yyyy" (date separator doesn't matter) and DateTextBox.xAllowMonthNames is used, the auto fill of date separators does not work when the user types a one digit day. For example, "1mar02" does not work while "01mar02" becomes "1-MAR-2002".
  • ASP.NET 2.0 assembly only. The DateTextBox.xReadOnlyAllowsPopupCalendarB=true didn't work. (Microsoft has changed the TextBox's class to retain the value of the Text property from the ViewState when ReadOnly is true.)
  • When using the Hungarian culture (hu-HU), the automatic tooltip on the DateTextBox showed the date format incorrectly as this text: "D . . ." instead of "D.M.Y".

2/19/2006 Professional Validation And More v3.0.4
Notice of breaking change: VAM has always demanded that buttons and other controls that submit the page are correctly hooked up to VAM to get client-side validation. If you didn't follow this rule, your buttons may sometimes validate and sometimes not. The breaking change is that all controls that submit the page which are not attached to VAM will never run client-side validation. If you were lucky enough to get validation before without using a control attached to VAM, you will no longer get it. So be sure that your buttons are using the VAM submit controls or the techniques described in the section "Submitting the Page: Server-Side Validation" in the Validation User's Guide.

  • VAM has been tested with the new EasyListBox v3. Documentation on how to get EasyListBox to work best with VAM is found in the [VAM product folder]\Third Party Support\EasyListBox folder.
  • VAM now supports the Q4 2005 release of Telerik r.a.d. controls, starting at SP2 (RadGrid support starts at SP3). There were some assembly changes. So as you migrate to this version, please see the instructions for updated filenames and the <assemblyBinding> tag values. Documentation is found in [VAM product folder]\Third Party Support\Telerik r.a.d. controls folder.
  • Support for more versions of Infragistics UltraWebGrid is included. See [VAM product folder]\Third Party Support\Infragistics WebGrid folder.
  • Support for Infragistics WebCombo and WebDataInput controls is included. See [VAM product folder]\Third Party Support\Infragistics DataInput and Combo folder.
  • The ValidationSummary introduces the method AddMessage(). It permits adding messages to the ValidationSummary on the server side, usually in response to errors that are returned by your business layer. See the topic "Adding ErrorMessages At Runtime" in the "ValidationSummary Control" section of the Validation User's Guide.
  • The PeterBlum.VAM.Globals.Page.RegisterSubmitControl() method now supports the ASP.NET 2.0 LoginStatus control. Just pass the LoginStatus control into the first parameter and an empty string in the second parameter. Now the LoginStatus control will not cause client-side validation to occur.
  • The Validation User's Guide has a new section covering how VAM can be used with every webcontrol delivered in the ASP.NET framework, including all version 2.0 controls.
  • The PeterBlum.VAM.Globals.Page.AddHintToControl() method now supports RadioButtonList, CheckBoxList, and any other control that implements a "GetChildMethod" in custom.VAM.config.
  • In ASP.NET 2.0, controls that submit using __doPostBack will sometimes validate and sometimes not, depending on some prior validation action on the page. Now calls to __doPostBack will never validate. If you want validation, use either a VAM submit control or generate the __doPostBack() call using PeterBlum.VAM.Globals.Page.GetPostBackEventReference(thecontrol, "", "", false) as documented in the Validation User's Guide.

Bugs fixed
  • When the ValueWhenBlank property on any textbox contains a single quote, it caused a javascript error.
  • The DecimalTextBox reported a javascript error when the user typed a decimal number starting with a decimal separator like ".5".
  • When using spinners on numeric TextBoxes and you use a decimal value for the SpinnerIncrement, rounding errors can cause strange numbers to appear. This is due to the 80 bit math used by browsers in Javascript. The code now uses a rounding technique to clean up those math errors.
  • When using the DropDownListSegment of the MultiSegmentDataEntry control and the control is set to Visible=false, later when its set to Visible=true on a postback, the lists would be empty instead of containing the items you defined.
  • When using the DropDownListSegment of the MultiSegmentDataEntry control and using a validator on the control, the validator didn't fire if you last changed the dropdownlist before moving focus out of the field. (It still fired onsubmit.)
  • When using Hints on the MultiSegmentDataEntry control and you wanted to show validator error messages in the hint, any validator that is attached to the MSDE did not show its error message. (Validators assigned to individual segments did show.)
  • When using the TabIndex property on the MultiSegmentDataEntry control, Internet Explore tabbed first to the containing span tag before entering the first segment.
  • Alignment of segments in the MultiSegmentDataEntry control has been improved. The textboxes were slightly higher than the dropdownlists. (Note that static text between fields remains a little lower, but in line with text in the same line outside of the control.)
  • IgnoreConditionValidator would not show its error message in the ValidationSummary when the ValidationSummary was an earlier control in the page.
  • In ASP.NET 2.0 only: When using the validation group name that starts with the + token, client-side validation did not prevent submitting the page when there are invalid validators in some cases.
  • When using the OverrideClientSideEvaluation property on a validator along with the PeterBlum.VAM.Globals.Page.ControlErrorCssClass property, when an error was setup to show the error CssClass, it did not restore to the original class after an edit to the textbox.
  • When a LinkButton is used with a confirm message, either on Globals.Page.ConfirmMessage or on LinkButton.AltConfirmMessage, the confirm message appeared twice if the page was valid and the user selected "OK".
  • In the ASP.NET 2.0 GridView control, the paging links would prevent post back if there was an invalid control inside the grid that was already showing its error message.
  • In the ASP.NET 2.0 assembly only: When using the GridView control with VAM's CommandField, the Save/Update button did not always fire the RowUpdated event.
  • In the ASP.NET 2.0 assembly only: When you use the StyleSheetTheme property on the Page, its values would not be reflected in design mode of VAM's controls.
  • In the ASP.NET 2.0 assembly only: You are supposed to be able to turn off the default style sheet <link> tag by setting the VAM_StyleSheetFileUrl key in the web.config file to an empty string. It didn't work. The default style sheet URL was supplied instead.
  • In the ASP.NET 2.0 assembly only: When attempting to add the <link> tag to the style sheet file, if your <head> tag contains the symbols <% and %>, an HttpException was thrown. Now it will omit the link tag. If you use <@Page trace="true" >, the trace will inform you when this happens.
  • When you called the javascript function VAM_RunAllFSC(), it did not run any MultiFieldStateControllers or MultiFSCOnCommand controls.
  • The method PeterBlum.VAM.Globals.UsingAltHttpHandler() did nothing when Page.IsPostBack is true. It should work regardless of IsPostBack.
  • When VAM is used with Peter's Date Package, Opera 7 and 8 failed to popup the calendar and help menu reliably. Sometimes they would not popup at all.
  • In ASP.NET 2.0 only: When you setup the Form with the DefaultButton property, use the ENTER key to submit when there is a validation error. It will report the error. Fix the error and use ENTER again. That page will submit except it won't fire the correct post back event handler for the default button. This has been corrected.
  • In ASP.NET 2.0 only: When using IIS to map a virtual URL to a physical path, if your mapping does not end in a trailing \ character, design mode will report errors in locating your licenses and custom.vam.config file.
  • In ASP.NET 2.0 assembly only: Sometimes validators showed this message in design mode: "No file is found at VAM\VAM.config. This file is required to run VAM.". Notice the file path is exactly "VAM\VAM.config". Only this case was a bug that is now fixed. You should expect this error with other paths to indicate a setup problem.
  • When you have a VAM Suite Development.lic file deployed to production and its used, it should report an error describing a limit of IP addresses. Instead, it provided the wrong message, which was: "There are no valid [modulename] licenses files found in [filepath]".
  • VAM 3.0.2 and 3.0.3 only: In IE Mac 5.0 and 5.1, validation would fail when submitting the page.
  • In the PageSecurityValidator, if you set DetectInjectionSymbolsInQueryString=true but did not have any rules in CookieRules or QueryStringRules, the DetectInjectionSymbolsInQueryString feature was ignored.
  • When a MultiSegmentDataEntry control contained DropDownLists and was Visible=false, any value assigned to it would not be preserved in the viewstate at postback.

2/19/2006 Peter's Date Package v1.1.11 Update
  • In ASP.NET 2.0 only: The "Bindable" properties introduced in v1.1.10 now support intellisense. Reminder: they can only be assigned with DataBinding notation in the HTML definition of the control.
  • The "Bindable" properties now support setting their value using strings. (You cannot GET as a string.)
Bugs fixed
  • In FireFox, Mozilla, and Netscape 7+, when using borders around cells in the calendar and there is no cellspacing, the border lines looked strange.
  • If you type into any of the textboxes or even hit tab to move through them prior to the page being initialized, you will get a javascript error. Now it will give you an alert box to inform the user to delay their entry.
  • On Mozilla based browsers, if any of the textboxes are ReadOnly and you tab to them, tab stops working. You have to use the mouse to move focus to another field.
  • Sometimes a double-click on the calendar toggle button would leave the calendar stuck open.
  • Only in v1.1.10: When any of the textboxes where placed into a TableCell control, design mode would not show the Table in its normal format. Instead it would appear as "[Table TableID]".
  • Only in v1.1.10: When any of the textboxes are added into certain controls, design mode will show them as an error. The error message is "Object reference not set to an instance of an object."
  • In the ASP.NET 2.0 assembly only: When attempting to add the <link> tag to the style sheet file, if your <head> tag contains the symbols <% and %>, an HttpException was thrown. Now it will omit the link tag. If you use <@Page trace="true" >, the trace will inform you when this happens.
  • Only in v1.1.10: the TimeTextBoxCompareValidator generated a javascript error when its TimeOfDayTextBox was not attached to a DateTextBox.
  • QuickDateMenu ignored settings of the following properties and used their default values: xOnPopup, xOnPopDown, xHorzPosition, xHorzPositionOffset, xVertPosition, xVertPositionOffset, and xIEFixPopupOverList.
  • When using the VAM Style Validators to evaluate a DateTextBox, cultures that use a space character for their date separator would fail to validate.
  • In the ASP.NET 2.0 assembly only: All of the validators would generate a javascript error when their EnableClientScript property was false.
  • When any popup control appears within a scrolling element of a page, if that element was scrolled more than the height of the page, the popup appeared too high on the page.

11/8/2005 Peter's Date Package 1.1.10 Update
NOTE: If you use Professional Validation And More v3, please update to v3.0.3 as VAM has been modified to handle some new functionality in PDP 1.1.10.

  • ASP.NET 2.0 assembly included. Provides support of ASP.NET 2.0 features including XHTML, easier localization on strings, automatic setup of the style sheet <link> tag, removal of obsolete API features and more. See the User's Guide for the section "ASP.NET 2.0 and Visual Studio.Net 2005 Enhancements".
  • Documentation has been enhanced using techniques previously applied to the VAM 3 upgrade. There is a separate Installation Guide, richer step-by-step instructions for adding controls, extended details on many topics where there was heavier load on tech support, and quick jump tables on many sections.
  • ASP.NET 2.0 assembly only: When you use the SpecialDates control with CS_Calendar, you can now have it use callbacks (AJAX technology) to update the SpecialDates control with new data for each month. This reduces the size of the data passed to the browser by limiting the data to just one month each time. See the xCallbackOnMonthViewChangeB property.
  • Extensive enhancements to the CS_Calendar.OnMonthViewChanged event. The MonthViewChangedArgs parameter provides start and end dates for the month shown plus access to the CS_Calendar and its SpecialDates control.
  • When using the CS_Calendar.OnMonthChangedEvent, it normally only fires during a post back caused by changing the month (it depends on the xAutoPostBackOnMonthViewChangeB property). Often users setup the OnMonthChangedEvent to populate the SpecialDates control and want it to be called each time the page is created, not just on a month change post back. Use the new xAlwaysInvokeOnMonthViewChangedEventB property.
  • CS_Calendar provides a new property, xCurrentMonthViewed. It is a DateTime object representing the first day of the current month viewed.
  • DateTextBox, MonthYearTextBox, and AnniversaryTextBox offer a new property, xAdditionalDateSeparators. Sometimes you want to allow the user to type other date separators than then one supplied by xDateTimeFormatInfo.DateSeparator. Define those other date separators in this property.
  • DateTextBox, MonthYearTextBox, and AnniversaryTextBox offer a new property, xMonthNamesUppercaseB. When you use xAllowMonthNames=Show, the month names are reformated into uppercase. With xMonthNamesUppercaseB set to false, the month names can now be the same case they are defined in the xDateTimeFormatInfo property.
  • TimeOfDayTextBox and DurationTextBox have a new property xDecimalMode which lets you determine the role a period character has in time entry. Prior to this, the period was always used to represent a decimal form of time. Now it can be disabled or used as an alternative time separator with this property.
  • TimeOfDayTextBox and DurationTextBox have a new property, xBlankStartsAt. It determines the initial value assigned to a blank textbox when using spinners. It can be the current time, min/max time, or a value from xBlankStartsAtValue.
  • There are new ways to get and set values on the data entry controls when binding. See the DateTextBox.xDateBindable, CS_Calendar.xSelectedDateBindable, and TimeOfDayTextBox.xDateTimeBindable properties.
  • When using SmartNavigation or IFrames, sometimes popups appear transparent or have other strange drawing problems. This is due to a hack to allow popups to appear over listboxes and dropdownlists in IE/Win 5.5-6.x. One way to resolve this problem is to turn off the hack. That can now be done with the new property xIEFixPopupOverList property, found on the various popup controls.
  • DateTextBox no longer wraps its buttons under the textbox when squeezed for space. It provides an HTML container to prevent wrapping. This container is controlled by the xContainerMode property. It can be turned off. xContainerMode replaces the xAutoAbsPositionModeB property.
  • TimeOfDayTextBox and DurationTextBox no longer use absolute positioning for its spinner buttons. It no longer wraps its help button under the textbox when squeezed for space. It provides an HTML container to keep all controls in one row. This container is controlled by the xContainerMode property. It can be turned off. xContainerMode replaces the xAutoAbsPositionModeB property.
  • You can now install the PetersDatePackage folder under the [web application root folder] without setting any keys up in the web.config file. This is the preferred location for ASP.NET 2.0.
  • The TrueBrowser class now supports an event handler, TrueBrowser.Customize, where you can configure a TrueBrowser object yourself based on the UserAgent supplied. This allows easier control over browser configurations. See the section "Customizing a TrueBrowser Object" in the User's Guide.
  • Design mode now shows the spinner buttons on TimeOfDayTextBox and DurationTextBox.
  • Context menus now offer several positioning properties: xHorizPosition, xVertPosition, xHorizPositionOffset, and xVertPositionOffset.
  • The xOnChangeFunctionName property on DateTextBox and TimeOfDayTextBox now supports a way to be called even when the textbox is blank or has erroneous data. Use the xOnChangeFunctionAlwaysB property and add the new pError parameter to your function.
  • To support XHTML compatibility, all <img> tags now provide a value for their alt= attribute. In many cases, you can set the value.
  • Better handling of Mono by avoiding changing the case of file paths and supporting the Unix directory separator character.
  • When assigning TimeOfDayTextBox.xDateTime to DateTime.MinValue or calling SetEmpty(), it now clears the DateTextBox as well as the TimeOfDayTextBox.
  • Support of the IndexOf() method on the SpecialDates.xDates collection.
  • Opera 7 and 8 would not popup the Help button menu.
  • Opera 8 would often misposition the popups to be flush with the top of the page.
  • Some cultures specify a trailing date separator (including Hungarian (hu) and Latvian (lv)). These would generate both client side and server side errors.
  • When using decimal entry in TimeOfDayTextBox or DurationTextBox, if the user typed "08" or "09" for hours, it would convert the time into 12:59:59.
  • Better positioning of popups when they have a wide border or they are contained in another element that has a wide border.

10/10/2005 Peter's Polling Package v1.1.2 Released
  • With the new xEntryAnswerElements property, you can format the radio button answers with values representing the current total for the answers including bar graphs, total votes, and percentage.
  • With the new xRotatingPolls property, you can make new polls appear shortly after the user votes on the current poll. See the "Rotating Polls Mode" section of the User's Guide.
  • With the new xThrowExceptions property set to false, if your database throws an exception, it will no longer be sent back to the page. Instead, the PollControl will show itself in the "There are no polls to show" view.
Bug fixes
  • In design mode, when showing both the List and Poll section on the Recent Polls control (via a right click on the Recent Polls control), the xPolls.ToolTip property gets set to say "DEMO MODE".
  • ASP.NET 2.0/Visual Studio.net 2005 users could not get polls to save votes when used inside a UserControl, content form of a MasterPage, or any Naming container.
  • Sometimes when a bar reflected a value below 0.01, the bar would be too large for the value.

10/8/2005 Professional Validation And More 3.0.3
NOTICE: Visual Studio.Net 2005/ASP.NET 2.0 Users
The ASP.NET 2.0 assemblies included in this release are designed for ASP.NET 2.0 Release Candidate 1 and later. If you use an earlier build, you must either upgrade to RC1 or use the VAM assemblies built for ASP.NET 1.x.

Any attempt to use the VAM ASP.NET 2.0 assemblies with an earlier build will result in errors preventing you from using any validators and adding these controls into your toolbox.

  • The PeterBlum.VAM.Globals.Page.RegisterKeyClicksControl() method now supports mapping the function keys to buttons. Use values of 112-123 to represent these keys. Note that not all browsers support intercepting function keystrokes but IE, Mozilla, FireFox, and Netscape 7+ do.
  • The FieldStateController now offers the property SupportClientSideLookupByID which was previously only on validators. With it, you can setup javascript to invoke the FSC, modify its client-side properties and get the value returned from evaluating the condition.
  • Diner's Club changed their credit card numbers. The vam.config file contains the updated numbering system.
  • The CharacterValidator and CharacterCondition have a new property, Exclude. When true, the character set defined is excluded; all other characters are permitted. The NotCondition property has been depreciated on these classes because it doesn't set up the correct logic for exclusion.
  • Better alignment and positioning of MultiSegmentDataEntry's cells within that control, especially on Opera 7+ and Safari.
  • Continued improvements on displaying the spinners of numeric textboxes without absolute positioning, following up from the initial changes in v3.0.2. These controls now can avoid wrapping the spinners onto the next line on several browsers, using enclosing span or table tags.
  • MultiSegmentDataEntry control uses the white-space:nowrap style to prevent it from wrapping individual segments to the next line when squeezed for space.
  • v3.0.2 introduced an undocumented property called AutoAbsPositionMode on numeric textboxes. This has been depreciated. Use the new AutoContainer property instead.
  • In design mode, when a validator has ErrorFormatter.Display=None, it now applies the styles of the ErrorFormatter.
  • Import VAM Classes.exe and Convert Page to VAM.exe applications now detect read only files and prevent overwriting them. This helps when you keep files in a Source Control environment.

Bugs fixed
  • FilteredTextBox with no filtering properties setup allows all characters. That's fine. However, when you have a CharacterValidator attached, you got a javascript error as the validator evaluates, due to a bad regular expression.
  • When using any validator whose DataType is set to Date and the user enters 3 or more slashes, you would get a javascript error.
  • When using the CalculationController with a ConditionCalcItem assigned to a condition object of type MultiCondition or CountTrueConditions, a NullReferenceException may occur.
  • Some older browsers will report a javascript error when using any of the VAM TextBoxes. Includes Opera 6 and Netscape 4.
  • Some older browsers continued to generate javascript that sets up the auto detection of javascript, when the browser didn't support that code. The browser may report javascript errors.
  • The CharacterValidator/Condition automatically uses character set properties on the FilteredTextBox, when attached. If the CharacterValidator did not have at least one of its own character set properties enabled, you would get an exception.
  • In the ASP.NET 2.0 assemblies from v3.0.2, absolutely positioned validators would appear without their absolute positioning in design mode of VS.NET 2005. You couldn't even use the Layout; Position; Absolute menu command to work around this. There was no problem at runtime.
  • In the ASP.NET 2.0 assemblies from v3.0.2, when using the Development Server that is built into Visual Studio 2005, design mode would not show any of the default images so long as their URL starts with "~/".

9/6/2005 Professional Validation And More v3.0.2
  • Support for ASP.NET 2.0 features. Assemblies compiled with ASP.NET 2.0 Beta 2 are included and provide extensive enhancements related to the new features offered in ASP.NET 2.0. Each user's guide has a section detailing what has changed. The Installation Guide has steps to update from an ASP.NET 1.x site to 2.0. WARNING: This software is compiled with ASP.NET 2.0 Beta 2. It will be recompiled with the Release Candidate builds when they become available. A Beta 2 assembly may break when run on a site using the Release Candidate. A Release Candidate assembly may break when run on a site using Beta 2. So try to use versions of ASP.NET 2.0 that are the same release as these assemblies.
  • Client-side validation support for the Telerik r.a.d. controls suite including r.a.d. editor, r.a.d. grid, r.a.d. combobox, r.a.d. menu, and r.a.d. tabstrip. See the documentation in the Telerik r.a.d. controls folder to set up this support.
  • Several features that support images now let you assign the alternative text (the <img alt=''> attribute) so that when the browser fails to load the image, some text is displayed:
    • AlertImageErrorFormatter and TooltipImageErrorFormatter now have the ImageAltText property. It uses a global value from PeterBlum.VAM.Globals.Page.DefaultImageErrorFormatterImageAltText or the Global Settings Editor by default.
    • The images of RequiredFieldMarker and RequiredFieldDescription now use the global value from PeterBlum.VAM.Globals.Page.DefaultRequiredFieldImageAltText or the Global Settings Editor.
    • The NoErrorFormatter uses the global value from PeterBlum.VAM.Globals.Page.DefaultNoErrorFormatterImageAltText or the Global Settings Editor.
    • The spinners on numeric textboxes will show "+1" and "-1" or whatever value you define for incrementing.
  • The spinners on numeric textboxes no longer use absolute positioning, which was causing users to call VAM_MoveSpinners. It now uses a table that has style=display:inline;. It should now correctly position without you calling VAM_MoveSpinners. However, still use VAM_MoveSpinners if you show or hide the textbox to show and hide the spinners. SIDE EFFECT: absolute positioning always positioned the spinners to the right, even when there wasn't any screen space. inline positioning will wrap the spinners below if they don't fit on the screen. Right to left text will also position the spinners to the left now.
  • The CombinedErrorMessages control has a new property, ShowFirstMsgOnly. While the CombinedErrorMessages control is designed to show several validators error messages simultaneously, some developers believe its easier for their users to see just one error message at a time. When you set this property to true, only the first Validator that is invalid will show its error message. As that one is fixed, the CombinedErrorMessages control will show the next Validator that is invalid.
  • The CalculationController.DecimalPlaces property used to offer 1-4 decimal places. Now it offers 1-10 decimal places.
  • The CalculationController offers the ExtraControlsToRunThisAction property (like most of the other controls) so you can have other controls fire the calculation.
  • PeterBlum.VAM.TrueBrowser.Customize is a new delegate that is called when a new UserAgent is detected. It lets you customize the properties of the TrueBrowser object for that UserAgent. This way, you can introduce support for new browsers more easily.
  • The <ThirdPartyControls> section now can define a function that handles the appearance when there is an error. It is the <SetErrorStyleScript> tag.
  • The detection of javascript feature was only setup if you had at least one validator on the page. Now it is setup if you have at least one VAM control with client-side support, such as a VAM TextBox or FieldStateController.
  • A page with several CalculationControllers and FieldStateControllers could have poor performance as it initializes. The speed has been dramatically improved.
  • The web.config file key "VAM_ScriptVirtualPath" now allows the token "{VERSION}". It replaces the token with the same name of the folder containing the scripts as you find in the product installation. This way, you can have multiple versions of VAM scripts installed without updating the VAM_ScriptVirtualPath key.

Bugs fixed
  • When you have a module license (not the Suite license), you are allowed to use the CustomValidator. If you the only VAM control you use on a form is the CustomValidator, it gave a license error. So long as you had one valid license setup, the error should not have occurred.
  • Using a DataTypeCheckValidator for DataType=Date will not report an error when the year entered is 5 or more digits on the client-side but would report an error on the server side. It now reports an error with 5 or more digit years in both cases.
  • When the DuplicateEntryCondition is used under a MultiConditionValidator or CountTrueConditionValidator, a NullReferenceException occurred.
  • When DecimalTextBox uses a number in ValueWhenBlank and TrailZeroDecimalPlaces=0, the spinners did not work so long as the textbox matches ValueWhenBlank.
  • IE for Windows 5.0 would report a javascript error when attempting to show an alert with an error message. This is due to a bug in the browser's regular expression parser that does not accept an expression designed to find an HTML tag in the error message so those tags can be stripped out. This fix leaves the HTML tags in place when the alert is shown on the IE/Win 5.0 browser.
  • CalculationController generated a javascript error when using the ConstantCalcItem object with a CultureInfo whose NumericDecimalSeparator is not a period character.
  • CalculationController generated a runtime exception "The Owner property has not been assigned to a control which establishes a NamingContainer used to find other controls." when you added a CalcItem object programmatically in certain cases.
  • CalculationController did not add the ".0" to a decimal value displayed in a label when that value is a whole number. This was only a server side problem, based on using the AutoShowValue property. So a value of 2.0 would appear as "2" when it should appear as "2.0".
  • CalculationController using a ConditionCalcItem whose ExpressionFalse property is empty will cause a javascript error.
  • When using Interactive Hints to show validation errors in the hint, if a MultiConditionValidator supplied an error, there would be multiple copies of the same error message shown in the hint.
  • Intrasoft WebCombo 3.0 interfered with client-side validation when submitting. If there was a validation error, the page would still submit. A code change to VAM allows WebCombo's scripts to notice that VAM has requested the page not to be submitted.
  • If you set a LinkButton to Enabled=false, some of the client-side code still runs. Specifically, validation and disabling buttons for submit (DisableOnSubmit property). This is because IE does not actually stop the code from running on a disabled linkbutton. Mozilla doesn't even support the Enabled=false setting, leaving the linkbutton looking enabled and running the validation/disable code but not submitting the page. Defensive code has been added to avoid validating and disabling on submit when you click on a disabled LinkButton either on IE and Mozilla.
  • Using the VAM Button or LinkButton with DisableOnSubmit=true and CausesValidation=false, a click on the Button did not disable itself or any of the other disabled controls.
  • When using PeterBlum.VAM.Globals.Page.TextHiliteFieldsCssClass and the validator has EnabledClientScript=false, if the TextBox being validated has CssClass="", the fields that are affected by TextHiliteFieldsCssClass will get stuck in their "error" style after the error is fixed.

ASP.NET 2.0 Issues Resolved
  • When the Group property uses the special symbol "+", it did not work with client side validation. There was a format change of the value of any control's UniqueID property that broke a regular expression being used to evaluate the group property.
  • When using the CalculationController and you programmatically add a NumericTextBoxCalcItem to the Expressions property with its TextBoxID property assigned, it would throw a NullReferenceException.
  • Textboxes that have TabOnEnterKey=true did not tab on the enter key press when MaxLength is 0.

5/16/2005 Professional Validation And More v3.0.1 update
  • PeterBlum.VAM.Security.Globals.CleanupInputKeepingTags and CleanupInputKeepingTags2 will clean up another Script Injection attack pattern, replacing it with "!!".
  • When the Session is disabled (web.config <sessionState> mode is Off or <@Page enableSessionState=false >), an exception would occur indicating the Session is disabled.
  • When the sessionState is "StateServer", a TypeCastException sometimes occurred.
  • When any of VAM's textboxes are setup with to use the TabOnMaxLength, fast typing would drop keystrokes.
  • CurrencyTextBox permitted typing the parentheses characters when AllowNegatives property is false. It would not consider this valid. So the DataTypeCheckValidator would still stop the entry from being submitted.
  • During server side validation, the MultiSegmentDataEntryValidator did not report an error when IgnoreBlankText is false and the user left the field blank. It worked properly on client-side validation.
  • The MultiSegmentDataEntry control would generate a javascript error if all segments are DropDownListSegments.
  • When the MultiSegmentDataEntry control has a DropDownListSegment and a MultiSegmentDataEntryValidator, client-side validation failed with a javascript error.
  • When using the MSStyle validators, design mode reported an error message instead of drawing the actual validator. The message was "Object reference not set to an instance of the object".
  • When using the MSStyle CustomValidator and you had text between the start and end tags with a NEWLINE character, you would get a javascript error at runtime.
  • The Property Editor window for the ErrorFormatter property (on a validator) would generate an error message when you saved a template. It would save successfully. The Property Editor window for the Expression property on the RegexValidator would do the same when you saved an expression.
  • PeterBlum.VAM.Globals.Page.RegisterKeyClickControl() and the EnterSubmitControlID property did not work on Mozilla-based browsers. They generated a javascript error.
  • CalculationController generated a javascript error on Mozilla-based browsers instead of showing validator errors associated with the calculation.
ASP.NET 2.0 Issues Addressed
  • CombinedErrorMessages control would report an error about an incorrect ErrorFormatter property. VS.NET 2005 design mode added a property name "ErrorFormatter" to the control which previous versions did not, and therefore had no defensive coding to avoid the error. That defensive coding is now in place. Alternatively, you can delete the property named "ErrorFormatter" in the ASP.NET text tag for this control.

4/26/2005 Peter's Date Package 1.1.9 update
Installation instructions are found in the Upgrading Assistance.pdf document.

Note:If you are using Professional Validation And More, this version of Peter's Date Package requires VAM 2.0.3 or higher. VAM 3.0.0 users merely need to establish the <assemblyBinding> tag to map to VAM 3, as described in the VAM Installation Guide.

  • Safari has severe bugs with its Date object when using "UTC" (Universal Time). (This only affects versions 1.0 - 1.2.x; 1.3 seems to work correctly.) It returns the wrong date, often off by 1 month, when the Mac's Time Zone is at Greenwich Mean Time (GMT) and due west and Daylight Savings Time applies to the date. There is no way to avoid this bug. However, the javascript code has been modified to limit the impact so that it is off by one day. When you see dates on the calendar, it will look OK. When you select a date, it will be the correct date. However, as you popup the calendar or change the month, the selected date will visually jump back one day. Still it will use the correct date.
  • Safari has incorrectly defined the limits of the Javascript date object as Dec 14, 1901 - Jan 1, 2038. The correct range easily exceeds Jan 1, 0001 - Dec 31, 9999 on all other browsers and as defined in the javascript spec.
    As a result, all client side features that allow a larger range will be faulty outside this range on Safari. SpecialDates were more adversely affected by this problem in that if you leave a SpecialDateRange, SpecialDayOfWeek, or SpecialAnnualDate object's xEndDate unassigned (so that it goes to 9999), the client-side ignores these objects. This has been fixed by internally imposing a limit of 12/31/2037.
  • When using the MonthYearTextBox or MonthYearPicker and only one of these properties is assigned - xMinDate or xMaxDate, the months outside the date range did not dim correctly.
  • When DateTextBox or MonthYearTextBox are using xAllowMonthNames and the culture assigned to xDateTimeFormatInfo is a different language than the culture of the page, the initial date shown had the month name using the language of the page, not of xDateTimeFormatInfo.
  • When Telerik RadEditor is on the page with a Peter's Date Package control, their context menu also revealed the standard IE context menu. The IE context menu should have been hidden.
  • When using VAM Validators that change the background color of these textboxes on error, just tabbing through either DateTextBox or TimeOfDayTextBox triggered a RequiredTextValidator assigned to them on any Mozilla-based browser.
  • ICE Browser 5.05 caused an exception to be raised.
  • Some !DOCTYPE settings will cause the popup calendar to popup in the wrong location on IE, especially if they are near the bottom of the page as the code designed to shift the calendar when it goes outside the visible region is involved.

4/26/2005 Professional Validation And More 2.0.3 Update
Before you install:
  • If you are using Peter's Date Package, this version of VAM should use Peter's Date Package 1.1.9 unless you setup VAM's <assemblyBinding> tag to map to version 2.0.3.
  • If you are using Visual Input Security, make sure the VAM's <assemblyBinding> tag maps to version 2.0.3.
  • Installation instructions are found in the Installation Guide on page 20.

    Bugs fixed:
    • In Safari, the various VAM textboxes filtered out the arrow keys, home, end, pageup and pagedown.
    • When using multiple validation groups and multiple ValidationSummary controls that have AutoUpdate=true, once a ValidationSummary was shown and you edited a field, it included all validators on the page instead of those in its own group.
    • Introduced in v2.0.2, when you had a CustomValidator that included client-side code, had nothing assigned to ControlIDToEvaluate/ControlToEvaluate, and the page is using Globals.Page.ShowAlertOnSubmit, the alert appeared showing the error of your validator even when its valid. If the page was entirely valid, the alert appeared and when the user clicks OK, the page posted back.
    • When Globals.Page.FocusOnChange is true and you are using a CompareTwoFieldsValidator and your textboxes are IntegerTextBox, DecimalTextBox or CurrencyTextBox, if you entered a value into the second textbox that will trigger the validator then click directly into the first textbox, focus would rapidly jump between the two textboxes. It would not stop.
    • When using the Globals.Page.ControlErrorCssClass property with a validator that has a "cannot evaluate" state, if you caused that validator to show an error then edited the textbox to match the "cannot evaluate" state, the ControlErrorCssClass style would remain even though the validator error message was removed. Common "cannot evaluate" states are validators with a DataType property when the textbox that they are evaluating is empty.
    • When using the Globals.Page.ControlErrorCssClass property with an IntegerTextBox, DecimalTextBox or CurrencyTextBox, several validators that point to multiple textboxes could set the ControlErrorCssClass style sheet without showing a validation error. This is an unusual case.
    • Convert Pages To VAM.exe utility would report an error: "Index was outside the bounds of the array" when the filename of the code behind statement contained a minus or space character.
    • When using the CustomValidator from the PeterBlum.VAM.MSStyle assembly (<m2v:CustomValidator>) and its ControlToValidate property is unassigned, the ValidationSummary control did not show the error message on a client-side update. This situation required the CustomValidator to have a client-side validation function.
    • When using the Internet Explorer TabStrip WebControl with a validator on a page and the PeterBlum.VAM.Globals.Page.FocusOnChange property is true, if the first action after editing a field is to click on a tab, it would not set focus to the field with the error. If javascript errors are shown, one will appear: "Cannot set focus".
    • When a \ character is in the ErrorMessage or SummaryErrorMessage properties, it and the character that follows is not shown when client-side validation displays the message.
    • Since the devedge.netscape.com site closed, the Regular Expression Property Editor page had a bad link when you clicked on the "Regex Character Chart" button. The same page is at http://synchro.net/docs/js/ref/regexp.html. The button now points to it.
    • ICE Browser 5.05 caused an exception to be raised.
    • When using Peter's Date Package with the VAM-extensions, VAM's RangeValidator is supposed to automatically retrieve values for Minimum and Maximum properties from DateTextBox.xMinDate and xMaxDate. This was working fine on client-side validation but not on server side validation. Its now working in both cases.
    • When any of the numeric textboxes are disabled or readonly by a FieldStateController, their spinners still worked if you double-clicked on them. They should be fully disabled.
    • EmailAddressValidator now supports the single quote character in names on the left side of the email address. The web.config file's Email address expression shown in the RegExpValidator's Expression Property Editor does the same.
    • .
    • IE Mac 5 has a bug in its regular expression parser that ignores underscores when the \w expression is used. \w should allow underscores. This causes the EmailAddressValidator to fail on IE Mac 5 when the email address contains an underscore. Now the regular expression used explicitly tests for an underscore in the left side of the email address. Also the web.config file's regular expression for Email address has the same modification.

    9/2/2004 Peter's Date Package 1.1.8 Update
    If you also use Professional Validation And More, be sure to retrieve Professional Validation And More 2.0.2. Install both Professional Validation And More and Peter's Date Package at the same time as they have version dependencies. See the Installation Guide of VAM and Upgrading Assistance.pdf of Peter's Date Package.

    • DurationTextBox now supports a lead zero on hours, following your xDateTimeFormatInfo.ShortTimePattern or LongTimePattern. It also supports your TimeSeparator. Previously it always used hh:mm and hh:mm:ss formats, ignoring your patterns.
    • DateTextBox now offers the property xBlankMonthYearOnPopup. It allows you to define the month and year used to popup the calendar when the textbox is blank. Prior to this property, it would always popup using the month and year from xTodaysDate. It will still do that when unassigned.
    Bug fixes
    • When the xDateTimeFormat.ShortDatePattern orders the year before the month on the MonthYearTextBox, any entry is considered invalid. For example, with the Chinese culture using 'yyyy-M', no entry is accepted on the server side.
    • When the DateTextBox and TimeOfDayTextBox are connected and have a TimeTextBoxValidator assigned, using Ctrl+N showed the validator error message even though the data was valid. This only happens when DateTextBox is blank. This problem was introduced in v1.1.7.
    • The UserAgent "Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)" would cause an exception.
    • The stand-alone PopupCalendar control and stand-alone PopupMonthYearPicker did not preserve the selected date on the Mozilla-based browsers.
    • The CS_Calendar control was returning to the initial month shown after the page is submitted. (This was only a problem when the calendar updated months on the client side and did not auto post back on a month or date change.) It now returns to the month with the selected date, if there is one. That is the month that most likely was viewed when the page was submitted.
    • The Mozilla browser (not its Netscape or FireFox versions) would not filter keystrokes and would report javascript errors as you typed.
    • Mozilla 1.4+, Netscape 7.1+, FireFox ran the keystroke commands for Next/Prev Day/Month on DateTextBox twice, jumping by two. Side effect of a bug fix in 1.1.7. (The Mozilla code base has a bug with / and ? characters that I'm attempting to work around.)
    • Mozilla did not popup its normal context menu where it should when a DateTextBox, TimeOfDayTextBox or DurationTextBox is on the page with its own context or help menus. (This is due to a design change in Mozilla that no longer matches the official W3C spec. My code was working to spec.

    9/2/2004 Professional Validation And More v2.0.2 Update
    If you also use Peter's Date Package, be sure to retrieve Peter's Date Package 1.1.8. Install both Professional Validation And More and Peter's Date Package at the same time as they have version dependencies. See the Installation Guide of VAM and Upgrading Assistance.pdf of Peter's Date Package.

    • By default, the ButtonColumn control (used in a DataGrid) always generates buttons with the CausesValidation property set to false. In other words, these buttons do not validate on the client-side and only validate on the server side if you explicitly call Globals.Page.Validate(). Now the VAM ButtonColumn control has a CausesValidation property so you can take control.
      Breaking change notice:It will default to false to match the existing functionality. If you have used a technique to modify the CausesValidation value of the button control contained in the ButtonColumn, this will break your code. You must switch to using the new property.
    • The PeterBlum.VAM.dll assembly now supports the CLSCompliantAttribute.
    • The Konqueror 3.2 browser caused an exception. Its UserAgent had some unexpected formatting.
    • Netscape 4.x browsers showed the error message when there is no error.
    • Netscape 4.x browsers generated client-side script code which caused a javascript error.
    • The IntegerTextBox, DecimalTextBox and CurrencyTextBox consumed the ENTER key, preventing it from pressing the default button on the page.
    • Using the FilteredTextBox with the \ character in the OtherCharacters property caused a javascript error.
    • When using a CheckBoxList or RadioButtonList with the RepeatLayout property set to "Flow", client side validation always indicated that there was an error when you use any validator or condition that evaluates text. For example, CompareToValueValidator, RegexValidator, and CompareToStringsValidator.
    • When using AlertImageErrorFormatter or HyperlinkErrorFormatter on a validator that only runs on the server side, if the ErrorMessage property contains single quotes ('), you would get a javascript error after post back when an error should be shown.
    • CombinedErrorMessages control incorrectly disappeared after a post back, where the server side added some error messages from CustomValidators that are using OverrideClientSideEvaluation. It also happened when the validators are all server-side only.
    • When using a CustomValidator with ControlToEvaluate unassigned, a client-side evaluation method, an AlertImageErrorFormatter and the Globals.Page.FocusAfterAlert = true, a javascript error occurred when the error is shown.
    • When a CustomValidator has nothing assigned to ControlIDToEvaluate/ControlToEvaluate, it would not appear on the client-side ValidationSummary. It would appear after a post back creates the ValidationSummary.
    • When using a Microsoft Button or Microsoft ImageButton that is registered with the Globals.Page.RegisterSubmitControl method and it has CausesValidation=false, calls to Globals.Page.Validate() are necessary to manually perform validation. However, due to an incorrect group name passed back to the server side, Globals.Page.Validate() does not validate anything. This also affects the VAM ButtonColumn which uses the Microsoft buttons and RegisterSubmitControl() method.
    • The PeterBlum.VAM.Globals.Page.ConfirmMessageGroup property did not work when assigned to text that contained any lowercase characters.
    • When PeterBlum.VAM.Globals.Page.TextHiliteFieldsCssClass or NonTextHiliteFieldsCssClass are "" and other properties associated with submitting a page were at their default, two problems occured. Any CombinedErrorMessage control would hide its error message when you clicked submit. The VAMPage.PostValidationUpdateScript function would not execute.
    • When you have a ValidationSummary and you have written javascript that calls form.reset(), the ValidationSummary will appear then disappear after a postback.
    • When using the Reset button with PeterBlum.VAM.Globals.Page.ShowAlertOnSubmit=true, some conditions will show the alert when Reset is clicked. No alert should appear.
    • There is an incompatibility between ASP.NET Design Mode Extender (ADME) and Microsoft's Reporting Services within Visual Studio.net. When there is an open Reporting Services project with the ADME VS.NET add-in installed, Intellisense stops working. Microsoft has determined the source of the problem within the Reporting Services code and supplied a simple workaround which is in this build. If you encounter the problem, please follow these steps:
      1. Exit VS.NET
      2. In Add/Remove Programs, remove ASP.NET Design Mode Extender
      3. Return to VS.NET. The ADME button and Tools menu command should still be there. Click on each and answer Yes to remove the command.
      4. Exit VS.NET again
      5. Run the installer from C:\program files\Professional Validation And More\ADME Installer.
      6. Open VS.NET. Confirm the ADME button and Tools menu command. Confirm that selecting the command opens ADME Settings Editor.
      7. Test against Reporting Services to confirm Intellisense now works.
    • The MSStyle Validators (used when you use the Convert Page to VAM.exe program) ignored the Visible property when it is set to false. It always shows Visible as true.

    5/17/2004 Peter's Date Package 1.1.7 Update
    • QuickDateMenu now has an auto post back feature. Use the xAutoPostBackB property and optionally setup a server side event handler in the OnSelection event.
    • QuickDateMenu now can be assigned to the MonthYearTextBox and AnniversaryTextBox.
    • When any textbox has a command invoked, it now fires the onchange event right away, updating related controls including validators.
    • Support for these assemblies in partial trust environments, including the AllowPartiallyTrustedCallersAttribute and documentation of required rights.
    • IE 6 browsers had a limitation. You couldn't use a !DOCTYPE that established a "compatibility mode" of CSS1Compatibility, such as using the XHTML notation. The limitation prevented the popups from appearing in the correct location when the page was scrolled. I've found a solution permitting other !DOCTYPES. However, this does not mean these controls are XHTML compliant. That cannot happen until ASP.NET itself is XHTML compliant, coming in ASP.NET 2.0.

    • When a DateTextBox had both xFocusOnError=true and xErrorAlertOnChange=true, if you entered a date that omits date separators and there was an error, you would get the alert box twice.
    • Mozilla 1.4+ and Netscape 7.1+ broke how slash characters are handled in onkeypress events. (Their predecessors and all other browsers work.) As a result, you couldn't type a slash into the DateTextBox. This is fixed.
    • When DateTextBox.xAutoPostBackB is true and the user selected any command from the context or help menus (except Popup Calendar), the command should auto post back when done. It did not.
    • When DateTextBox.xAutoPostBackB is true and the user types the keyboard command to popup the calendar, the calendar popped up but the page posted back right away.
    • When TimeOfDayTextBox or DurationTextBox.xAutoPostBackB is true, a JavaScript error may have occurred. The auto post back script had an error which prevented it from executing.
    • Introduced in v1.1.6: DataGrids reported an error that a control has a bad property when they contain any of the TextBoxes.
    • When a browser supplied no HTTP_USER_AGENT string, you can get an "Object reference not set to an instance of an object." exception. This is a second case. (An earlier case was fixed in 1.1.6.)
    • When there is a date range applied to the MonthYearPicker, it was possible to be missing the right arrow to scroll to the last year of the range. The user would not be able to get to that one year if it is the first year of the next group of years. DateTextBox, MonthYearTextBox and CS_Calendar all support MonthYearPicker with date ranges.
    • When there is a date range applied to the MonthYearPicker and the current year is at the end of the range, the some of the months were disabled. As you clicked on the arrows, the selected year changed but the months remained disabled. They now reflect the months available to the selected year.
    • When using the ContextMenu control for right clicks on the whole page, a right click on the page resulted in a javascript error before the menu popped up.
    • When using CS_Calendar with a browser that only supports the server-side calendar (xTrueBrowser.xSupportsCalendar=false, such as IE Mac 5.2, Netscape 4, and Opera 6), the OnDateChanged and OnMonthViewChanged event handlers did not fire.
    • Introduced in 1.1.6: When using the xAutoAbsPositionModeB property, some situations would cause a NullReferenceException on any of the textboxes.
    • When using SpecialDates on a CS_Calendar to supply a tooltip to a date cell, the tooltip was shown on cells that were blank (out of range, hidden) when the calendar is in server-side mode. (xTrueBrowser.xSupportsCalendar=false)
    • When you created a DateTextBox programmatically and accessed xPopupCalendar or xContextMenu properties before adding the control to the page's control tree, the calendar and context menu both would be suppressed. Similarly, if the DateTextBox was in a DataGrid and you accessed the same properties in the ItemCreated event, you had the same effect. You no longer have to use workarounds to resolve them.
    • Browsers built on the Mac OS X platform that utilize "AppleWebKit" (the engine of Safari) would throw an exception when detected. Now they will not. Commercially, only OmniWeb 4.5 was affected however, users developing their own code could get errors too. (Apple's Safari always worked.)

    5/17/2004 Professional Validation And More v2.0.1 Update
    See the "Installation Guide.pdf" for steps to update your web site with v2.0.1.

    Be sure to update any <assemblyBinding> or <add assembly> tags for PeterBlum.VAM.dll to reflect version 2.0.1. See the file Assembly Version Info for the config file.txt that is installed with the product for more information.

    • ValidationSummary has a new property, RelatedControl_InvisiblePreservesSpace. When using the RelatedControlID feature, this determines if the related control retains the space or not while invisible. See page 134 of the User's Guide.
    • Added two regular expressions to the Property Editor for the Expression property on RegExpValidator and RegExpCondition: Canadian Postal Code and US & Canadian Postal Codes.
    • CurrencyTextBox, IntegerTextBox, DecimalTextBox and FilteredTextBox now have the popup text editor associated with their ToolTip property in the Properties Editor. This allows entering lengthy text easily. FilteredTextBox now has the same editor on its Text property too.
    • FieldStateControllers now handle CheckBoxLists and RadioButtonLists better by updating the internal radiobuttons/checkboxes with the visibility, enabled, and CssClass properties of ConditionTrue and ConditionFalse. Previously they only updated the enclosing HTML tag around those buttons which didn't handle Enabled states well, especially on non-IE browsers.
    • Validators have an optimized system for managing the ViewState so that only the items you really want to store are kept. See the ViewStateMgr property on the validator controls. See page 123 of the User's Guide for details.
    • Support for these assemblies in partial trust environments, including the AllowPartiallyTrustedCallersAttribute and documentation of required rights. See page 28 of the Installation Guide for details.
    • In preparation for ASP.NET 2.0 ("Whidbey"), any HTML generated within VAM is XHTML compliant, with the exception of the spinners on CurrencyTextBox, IntegerTextBox, and DecimalTextBox. Any HTML generated using Microsoft's controls and classes remains HTML 4 and not XHTML compliant. The expectation is that if you use VAM 2.0.1 with Whidbey, the VAM controls will be compliant. This remains to be proven.
    • If you add to the FSC.ExtraControlsToRunThisAction, Val.ExtraControlsToRunThisAction, MultiFSC.ControlConnections, or CombinedErrorMessage.Validators properties programmatically, you no longer are required to create ControlConnection objects to add. Instead, the Add() method has been overloaded to permit passing just the control ID or reference that you want to use. VAM will figure out the rest for you.
    Bugs fixed
    • When using an <input type=file runat=server > control, the attached validators fired on a click in the textbox. They now fire on a change to the textbox.
    • When the EmailAddressCondition, CharacterCondition, or CompareToStringsCondition was within a MultiConditionValidator, the MultiConditionValidator did not generate the client-side validation code.
    • When using a CustomValidator, if you did not assign assign ControlIDToEvaluate, ControlToEvaluate, SecondControlIDToEvaluate or SecondControlToEvaluate, you would get a NullReferenceException on post back.
    • When using a CustomValidator and you set the ErrorMessage property, it was not reflected when a ValidationSummary appears before that validator. Happened only in the server side validator. The client-side wasn't affected by this.
    • Any validator whose DataType property is set to "Integer" treated values that exceeded the limits of Int32 as valid on the client-side until the number exceeds Int64 range. The server-side caught these excessive values.
    • When using the OtherCharacters property in CharacterValidator, CharacterCondition or FilteredTextBox and you enter '-' (minus character), errors could occur. They included javascript errors, server side Regex exceptions, and potentially invalid values getting through.
    • The regular expression for U.S. Postal Code shown in the Properties Editor had an error. It would not report an error when the first 5 digits were correct but the "+4" part was incorrect. For example, these were valid: 55555-, 55555-1, 55555-d. Be sure to replace the VAM.config file in your [webapp]\VAM folder. Additionally, any RegExpValidator using this expression should be updated with the new expression. (This does not happen automatically.)
    • Design mode did not update the "Select a Pattern" command's Regular Expressions List after you saved or deleted an expression within the Expression Property Editor.
    • The AlertImageErrorFormatter.ToolTipLookupID was ignored. String Lookups did not occur.
    • When CurrencyTextBox uses ShowThousandsSeparator and the current culture has NumberFormatInfo.NumberDecimalDigits <> NumberFormatInfo.CurrencyDecimalDigits, the initial value assigned to the DoubleValue property would reflect the NumberDecimalDigits. It now reflects CurrencyDecimalDigits.
    • When the DecimalTextBox has the CultureInfo.NumberFormat.NumberDecimalDigits = 0, ShowThousandsSeparator=true, and its TrailingZeroDecimalPlaces property set to zero, a trailing decimal place remained as the page was initially shown.
    • When the CurrencyTextBox uses AllowExtraDecimalDigits=true and the CurrencyDecimalSeparator is not a period, formatting problems appeared after the text was reformatted on the client-side.
    • The MultiFieldStateController caused the browser to hang when ExtraControlsToRunThisAction was used. Eventually IE put up an error message about stopping a script.
    • When using a MultiFieldStateController that changed the Enabled or Visibility state, on post back, Validation didn't know the correct state and would validate incorrectly. (This was not a problem in the FieldStateController.)
    • When FieldStateController.UseValidationGroup is true, the page was prevalidated as it is opened, as if you clicked submit. This should not happen. If you want the page to be prevalidated, call PeterBlum.VAM.Globals.Page.Validate() on the server side.
    • MultiFieldStateController did not initialize the controls to their state settings during page load.
    • FieldStateControllers had difficulty with changing CheckBox and RadioButton controls when they set them invisible or disabled initially. This is due to an unusual HTML output on these controls that writes the disabled or style=visibility:hidden attributes into an enclosing <span> tag so that they could apply to the label too. Now the code detects these controls and updates both the enclosing <span> tag and the tag for the checkbox or radiobutton. Note: This is not connected to CheckBoxLists and RadioButtonLists which are handled in another change in this release.
    • When using the String Lookup System with either the RequiredFieldDescriptor or RequiredFieldMarker for localization, if you post back and switch cultures, the text did not reflect the new culture. The ViewState had to be enabled for this error to occur.
    • When a Submit button was associated with Page.RegisterSubmitButtonToDisable(), if the button.Visible=false, a javascript error would occur.
    • Users of Infragistics UltraWebGrid v3.0 who added their grid to a UserControl (or other naming container) would get a javascript error. The fix requires that you have UltraWebGrid 3.0.20041.11 or higher. In addition, the underscore character is no longer permitted in the ID of the UltraWebGrid control and any containing naming container. See page 124 of the User's Guide for details.
    • When using the VAM EditCommandColumn control within a DataGrid, if any of the buttons are invisible, you would get a javascript error.
    • The CombinedErrorMessages control showed the incorrect messages when there were two or more of these controls on the page.
    • Browsers built on the Mac OS X platform that utilize "AppleWebKit" (the engine of Safari) would throw an exception when detected. Now they will not. Commercially, only OmniWeb 4.5 was affected however, users developing their own code could get errors too. Apple Safari was already working correctly.

    1/20/2004 Professional Validation And More v2.0 Upgrade
    • New validator: CreditCardNumberValidator (and CreditCardNumberCondition). Reviews the patterns in credit card numbers to confirm they match basic rules of credit card numbers.
    • New validator: CharacterValidator (and CharacterCondition). Confirms that every character in a text field is in a set of characters that you specify.
    • New validator: EmailAddressValidator. Aside from validating the character pattern on the client and server side, it can be hooked up to Advanced Intellect's AspNetMX email address validation engine to confirm the existance of the domain and even the actual email address. AspNetMX is a separate product available at www.aspnetmx.com.
    • New textbox: FilteredTextBox. Filters out characters that you don't want as the user types.
    • New control: CombinedErrorMessages. Now you can replace individual Error Formatters on each validator with a single Error Formatter. Removes the clutter when multiple error messages are shown as now they appear as a single piece of text under one error formatter. For example, an Image with Alert Error Formatter will list all error messages associated with a particular field in the alert box. You determine how the error messages are separated: by line breaks or text separators.
    • The new Global Settings Editor application provides a Windows UI to edit the custom.VAM.config file. It supports the <GlobalProperties> and <StringLookup> sections of that file.
    • The IntegerTextBox, DecimalTextBox and CurrencyTextBox now support an optional Spinner control. A spinner is a pair of arrows to the right of the text box that increment and decrement the value.
    • New error formatter: HyperLinkErrorFormatter ("Hyperlink with alert"). A hyperlink that when clicked, shows an alert with the message. A great way to reduce the page size while using a familiar metaphor to click.
    • The new HiliteFields feature allows other controls to change their style when a validation error is shown. For example, change the font color of the field label or the background color of an enclosing <DIV>. This is another way to catch the user’s attention.
    • Validators and FieldStateControllers have a new property, ExtraControlsToRunThisAction. This allows you to introduce more controls that when clicked or changed, run the validator or fieldStateController. On the FieldStateController, it replaces the properties ControlIDToRunThisAction and ControlToRunThisAction. Any existing code will continue to work but its converted to the new property at runtime. In design time, you will no longer see ControlIDToRunThisAction in the Property Editor.
    • DecimalTextBox has a new property, TrailingZeroDecimalPlaces, that determines if additional trailing zeros are added. It can also remove the decimal part when the value equals a whole number.
    • CurrencyTextBox has a new property, HideDecimalWhenZero, that determines if the decimal part is shown when the value is a whole number. When used, the text "12.00" will be reformatted as "12" while "12.1" will reformat as "12.10".
    • ValidationSummary now offers the property ScrollIntoView.
    • Validators no longer require that you set Enabled=false when the ControlToEvaluate is set to Visible=false. Instead, they automatically act as if Enabled is set to false.
    • Convert Pages To VAM.exe now converts the datagrid's EditCommandColumn and ButtonColumn classes.
    • The RegexValidator and RegexCondition now have the property IgnoreBlankText. It determines how to treat blank text. When true, blank text is not evaluated (like it does now and like Microsoft's RegularExpressionValidator does.) When false, blank text is treated as an error.
    • The page level setting ConfirmMessage now supports localization and string lookups using the new ConfirmMessageLookupID property.
    • CustomConditions, CustomValidators and any validator that uses the ServerCondition property now support the ability to change the ErrorMessage and SummaryErrorMessage within your custom condition, on both the client and server side.
    • Support for Infragistics UltraWebGrid.
    • Easily support third party textboxes, checkboxes, radiobuttons, listboxes, and dropdownlists that were not subclassed from their Microsoft equivalents and do not support the ValidationPropertyAttribute. (VAM already handles the rest.)
    • Support for client-side validation on third party client-side menu controls. When a menu command is selected that you want to post back, you can have it run client-side validation first. (You could always setup server-side validation on anything that posts back.)
    • Use the new Globals.Page.SubmitOrder property to determine the order of these three actions that occur when the page is submitted: validation, confirm message (when using the ConfirmMessage property), custom submit function (when using the CustomSubmitFunctionName property.)
    • Use the new Globals.Page.FocusAfterAlert property to set focus to the field with the error after the user invokes the alert box on the Image With Alert (AlertImageErrorFormatter) and HyperLink With Alert (HyperLinkErrorFormatter) error formatters.
    • Use the new global properties DefaultRequiredFieldToolTip and DefaultRequiredFieldToolTipLookupID to establish a default tooltip for the RequiredFieldMarker control. For example, have a tool tip that says, “Required”.
    • Use the new Globals.Page.SetFocusFunctionName to hookup a client-side function that is called whenever focus is set to the field being evaluated.

    • The CurrencyTextBox.AllowExtraDecimalDigits property did not get transfered to a DataTypeCheckValidator that monitors the CurrencyTextBox's format.
    • The Specialized TextBoxes showed the readonly properties IsEmpty and IsValid in the Properties Editor. They are no longer shown.
    • When any of the following conditions are contained in the MultiCondition, the browser may report a JavaScript error because they didn't get a chance to declare their VAM_XVF.js script file: DifferenceCondition, CountSelectionsCondition, CountTrueConditions, and any Specialized condition.
    • When using the VAMPage.CustomSubmitFunctionName, your function is incorrectly passed an object, not the group name string as promised in the docs. Now it passes the group name string.
    • When a browser's UserAgent is not supplied, you can get a NullReferenceException in the TrueBrowser.GetTrueBrowser method.
    • ValidationSummary.HyperLinkToField jumps to the field in an Enabler condition instead of the validator's ControlIDToEvaluate.
    • DecimalTextBox rounded to one decimal place when you assigned a value to its DoubleValue property.

    10/29/2003 Peter's Date Package v1.1.6 Update
    • Design change: TimeOfDayTextBox and DurationTextBox now offer the xOnChangeFunctionName property where you can hookup a JavaScript function to run when either of these textboxes fire the onchange event.
    • Design change: Licensing setup is much easier. You can assign Web Server and Site Licenses once, in Application_Start, and Redistribution Licenses once per page in Page_Load. Continues to support legacy licensing setup with the xLicensing property on each control. If you use the new setup, it will override the xLicensing property. See the User's Guide, page 45, for details on switching to the new model.
    • Design change: All date and time textboxes now automatically position their calendar icon and help button when placed on the GridLayout design mode surface of Visual Studio.Net. Previously you would have to enclose the control in an absolutely positioned <div> or <span> tag. See the new property xAutoAbsPositionModeB in the User's Guide. It defaults to being enabled. If you already have setup your textbox correctly, you will NOT need to change anything.
    • Design change: TimeOfDayTextBox and DurationTextBox now offer the ApplyRounding() method. Use it after you assign an unrounded time value and want the control to apply the rounding rule of xRoundUpMinutes.
    • Design change: CS_Calendar offers new properties to show any text or HTML that you want in the footer. (Change affects DateTextBox and PopupCalendar controls.)
    • Enhancement: Users Guide now documents the JavaScript functions useful for working with TimeOfDayTextBox and DurationTextBox.
    • When the TimeOfDayTextBox or DurationTextBox have style=visibility:hidden, an attached arrow button control still appears.
    • TimeOfDayTextBox and DurationTextBox arrow buttons respond more naturally to double-clicks.
    • Internet Explorer 4 for Windows reports a JavaScript error on any control with a popup element.
    • When the MonthYearPicker is in a UserControl or Panel and has its xMonth and xYear properties assigned, clicking on a different month or year results in a JavaScript error.
    • When a browser supplies no HTTP_USER_AGENT string, you can get an "Object reference not set to an instance of an object." exception.
    • When using the PDPToVAM's UnselectableDatesValidator, it does not properly validate on the client-side on the Internet Explorer for the Mac browsers.
    • When setting the DateTextBox property xShowPopupB to false in the Properties Editor, it no longer adds an extraneous "Visible=false" into the section of the ASP.NET text.

    10/20/2003 Professional Validation And More v1.0.1 Update
    • IgnoreConditionValidator. This new validator is very similar to a CustomValidator. However, instead of putting your validation code in an event handler, you can let your validation code be part of your logic to save data. This avoids splitting your code. See page 40 of the User's Guide.
    • You can have VAM automatically disable submit buttons after they are clicked, to prevent the user from submitting the page twice using the new PeterBlum.VAM.Globals.Page.RegisterSubmitButtonToDisable method. Set page 88 of the User's Guide.
    • ValidationSummary has a new property, ListLeadImageURL. This makes it easy to use an image in front of each error message when the DisplayMode = List. See page 98 of the User's Guide.
    • The DataGrid's EditCommandColumn and ButtonColumn contain Microsoft buttons and are very difficult for users to use VAMPage.RegisterSubmitControl to make those buttons work with VAM. VAM now includes subclasses of the EditCommandColumn and ButtonColumn, PeterBlum.VAM.EditCommandColumn and PeterBlum.VAM.ButtonColumn, that correct these problems. See "Supporting the DataGrid", page 106 of the User's Guide.
    • Specialized TextBoxes now have several JavaScript functions to assist you in writing code that gets and sets values on the client-side. The User's Guide details it, along with examples. See page 123, "Responding to Client-side Changes".
    • The Convert Pages to VAM.exe utility now supports User Control (*.ascx) files.
    • The supplied gif image files 'requireddot.gif' and 'valerroricon.gif' have been modified to support a transparent background. They previously had a white background. Copy these files from the [VAMInstallation]\VAM\Appearance folder to your [webapp]\VAM\Appearance folder, if you want these updates.
    • When Globals.Page.BlinkOnSubmit allows blinking, when a page posts back and then redraws with errors shown, those errors will blink. This allows server side validation of a custom validator to still benefit from blinking as they show their error.
    • Validators and Conditions have a new property, OverrideClientScriptEvaluation. This is best for custom validators and IgnoreConditionValidator to show their error initially after post back but as the user changes the associated field or submits, client-side will hide the error message. This allows a limited client-side interface when you don't write your own for your custom validation conditions. See "Client-side condition" on page 55 of the User's Guide.
    • New method on the VAMPage object, RegisterChildSubmitControls. It is a companion to VAMPage.RegisterSubmitControl that registers all submit controls contained within any control you supply. See "Buttons and Controls To Submit the Page" on page 45 of the User's Guide.
    Bug fixes:
    • Pages that run from a call to Server.Transfer did not setup the client-side portions of VAM and often generated scripting errors. See the new topic "Using Server Transfer" around page 138 of the User's Guide for directions on using Server.Transfer.
    • The MS-Style Validators did not handle the case when the Text property gets its value from the "inner text". This is how VS.NET sets this property. It usually is a problem for users of the Convert Pages To VAM.exe program. If you already have a "Text" property written into the attributes of a control, it will report an error. Remove that property and reassign the text to the inner text (between start and end tags.)
    • When a validator, fieldstatecontroller, or specialized textbox is contained within another control that is Visible=false, an exception was thrown indicating a property like ControlIDToEvaluate is incorrectly set.
    • The PeterBlum.VAM.LinkButton did not run client-side validation.
    • When the ValidationSummary is on the page but there are no validators or other VAM controls, a JavaScript error appeared.
    • When the FieldStateController or MultiFieldStateController is Enabled=false, on post back, it threw an exception if one of the controls it's attached to (ControlIDToChange or ControlConnections) was set to Visible=false.
    • The Globals.DefaultControlErrorCssClass property was not copied to each page's ControlErrorCssClass property.
    • The {LABEL} token did not perform a string lookup when the Label.LabelControlID property pointed to a LocalizableLabel. It only gets the label's Text property. It now supports LocalizableLabel.
    • When a TextBox was set in Password mode, validators were fired when you click on the textbox. They now fire when the textbox changes.
    • When using the ErrorFormatter.GapBeforeType property set to "Pixel", the <img> tag references a file in [webapp]/VAM/Appearances/. It now also supports the user defined path in web.config's VAM_AppearanceVirtualPath key.
    • When the Culture specified NumberFormat.NumberGroupSeparator = "" or NumberFormat.CurrencyGroupSeparator = "", you would get a runtime error or a JavaScript error.
    • The ErrorFormatter.GapBefore property was supposed to show a gap only when the error message is shown. The gap showed all the time.
    • When retrieving a value from IntegerTextBox.IntegerValue, DecimalTextBox.DoubleValue, or CurrencyTextBox.DoubleValue, if the text is not correctly formatted, these could throw a "Null object" exception. They now throw a FormatException instead.
    • When using a culture whose DecimalSeparator was not a period (.), the DecimalTextBox and CurrencyTextBox would throw an exception as you retrieve the value from the DoubleValue property.
    • The ValidationSummary control always showed the HyperLinksToolTip, even when HyperLinkToFields was false. It shouldn't show in that case.
    • When using either FocusOnChange or FocusOnSubmit and you have a richtextbox that is being validated, you would get a JavaScript error after it validates. Some richtextboxes use a hidden input field and that element is associated with the ControlIDToEvaluate. Its illegal to set focus on a hidden input field.
    • When a browser supplies no HTTP_USER_AGENT string, you would get an "Object reference not set to an instance of an object." exception on a call to GetTrueBrowser().
    • When the Enabler property was set with a condition that includes the DataType property, you would get a JavaScript error: "object doesn't support the property or method" when the validator evaluates.
    • Gecko-based browsers (Netscape 6+, Mozilla) did not filter illegal keystrokes on the Specialized TextBoxes.
    • Opera 7 did not reformat the DecimalTextBox.
    • RequiredTextValidator and RequiredTextCondition now supports the System.Web.UI.WebControls.RadioButtonList. It should compare to the ListItem.Value of the selected radio button. (Microsoft's RequiredFieldValidator does this.) Worked properly on the server side but not the client-side.
    • When using the web.config setting VAM_AppearanceVirtualPath, it did not work when the string did not match "~/VAM/Appearance" with case insensitivity.

    8/12/2003 Peter's Date Package v1.1.5 Update
    The following are changes and fixes in v1.1.5
    • Design change: Includes support for Professional Validation And More, another product of PeterBlum.com. There are many new things you can do with the VAM-style versions of the validators. See the file "VAM Style Validators.pdf" for details.
    • Design change: New property, xAutoSharedCalendarB, makes it easier to setup a shared calendar between various DateTextBoxes. Its especially helpful if you use the DateTextBox on a DataGrid, DataList or Repeater.
    • When CS_Calendar.xEnableMonthYearPickerB is false and you are running on an IE/Win browser, typing "M" (the shortcut for Month Year Picker) generates a JavaScript error.
    • v1.1.4 broke the MonthYearTextBox. It ignores any year you enter, always using the current year.
    • v1.1.4 turned off the popup calendar on IE/Mac 5 browsers. It has been restored for IE 5.0-5.1. It should be off for IE/Mac 5.2.
    • When you set the BackColor or ForeColor property on the MonthYearPicker, that color doesn't transfer into the month and year tables.
    • When you set style properties on the context menu of CS_Calendar (xContextMenu.ForeColor, for example) and have at least two DateTextBoxes or CS_Calendars with this setting, you will get a runtime error for FindControl reporting the control "_CM" is duplicated on the page.
    • When you set the ForeColor attribute on the Context menu of CS_Calendar, it doesn't apply. The page's default forecolor is used.
    • When you setup an alternative path to a folder in the web.config file and it starts with a tilde, a double-slash will appear in the script file path if you move the web.config file to a server whose domain is the actual web app. This can cause javascript errors.
    • When you use CS_Calendar.xIsEmpty before referencing CS_Calendar.xSelectedDate, xIsEmpty returns true even when there is a selected date.
    • When there are no context or help menus from any PDP control on the page and you have a DateTextBox within a <DIV style="OVERFLOW:auto;">, the calendar may popup in the wrong place when the area is scrolled.

    7/7/2003 Peter's Date Package v1.1.4 Update
    Here are the changes and bug fixes.
    • Design change: Now supports Safari v1.0 browser (Apple). Previous versions were fully incompatible generating a runtime error on the page. Aside from getting rid of the runtime error, numerous changes were made to the scripts to get this browser to work. The Safari 1.0 (85) browser is still a very buggy platform and Peter's Date Package will demonstrate some of those bugs when workarounds were not found. Click here for details.
    • Design change:CS_Calendar has a new property, xDayCellBorderSides. When you are showing borders and WeekRowCellSpacing is 0, you normally see a grid of lines. This property lets you show only horizontal or vertical lines for unique visual effects.
    • Netscape 4 stopped handling client-side reformatting and validation of the DateTextBox (not using validator controls but the internal code of the DateTextBox).
    • Netscape 4 stopped handling client-side reformatting validation of the TimeOfDayTextBox and DurationTextBox (again internal validation)
    • Netscape 4 never handled DateTextBox or TimeOfDayTextBoxes correctly on the client side when these controls were in a UserControl or other naming container. Pages run on NS4 like this would get JavaScript error messages (in the status bar) instead of properly handling keystrokes and reformatting the text.
    • Internet Explorer for Mac v5.2.x has been released on Mac OS X. While its earlier version, 5.1 worked well, v5.2 is still a buggy browser. It has no trouble with the JavaScript (no JavaScript errors). However, after all the client-side javascript runs, it hangs when attempting to show the calendar, either in CS_Calendar or when you popup. (Recent IE Mac versions have all struggled with calculating the size of a multinested TABLE. It looks like this is the problem here.) To resolve this, I've made CS_Calendar become server side only for this browser version. The PopupCalendar is entirely shut off. Internet Explorer for Mac v5.1 is the recommended IE browser on the Mac for Peter's Date Package.
    • Date entry should translate a one segment value ("5") into the day of the current month: 6/5/2003. It was always translating a one segment with the segment that comes first in the ShortDatePattern. In the US, that means it translated to a month instead of a day. Same with two segment entries.
    • TimeTextBoxValidator did not detect one case as an error on the server side: when the DateTextBox was blank or invalid while the TimeOfDayTextBox was filled in, it should report an error. It did not.
    • When using the OnDateChange or OnMonthViewChange events of CSCalendar, its possible to get this runtime error: [ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: Year, Month, and Day parameters describe an unrepresentable DateTime.]
    • When using the OnDateChange event handler of CSCalendar, the event may be fired twice on the page.
    • When the TimeOfDayTextBox uses xDateTextBoxControlID, you may get an "Multiple controls with the same ID" error when you have placed <DIV> tags around the <FORM> tags.
    • Since IE 5.0 has caused more than its share of problems with the popupcalendar on DateTextBox, I've disabled it by default on that browser. The TrueBrowser.xSupportsPopupCalendarB property defaults to false on IE 5.0 for Windows.
    • When TrueBrowser.xSupportsPopupCalendarB was false, the DateTextBox still showed the command "Calendar" in the context menu.
    • The Help button on TimeOfDayTextBox and DurationTextBox appears too far right when arrow buttons are shown on NS7+ and Opera 7.
    • When QuickDateMenu is on a page, it may generate a JavaScript error at load time or not popup (if JavaScript errors are turned off) when the browser doesn't support context menus. Specifically, the browser sets the TrueBrowser.xSupportsContextMenuB property to false.

    5/19/2003 Peter's Date Package v1.1.3 Update
    Here are the design changes and bug fixes:
    • DateTextBox has a new property, xPopupCalendar.xSharedCalendarDateTextBox. It is an alternative to xPopupCalendar.xSharedCalendarDateTextBoxID to use programmatically when the DateTextBox that you want to share is in another NamingContainer.
    • When a TimeOfDayTextBox or DurationTextBox shows the arrows and its on top of another element that is absolutely positioned, the arrows may ignore clicks on them. This is due to the other element's z-Index, which may be higher than the arrow buttons (which are absolutely positioned.) This fix gives the arrows a z-index of 29000.
    • v1.1.2 broke the DateTextBoxValidator slightly. It reports an error when the textbox is blank. Its not supposed to report an error, letting you detect that case with a RequiredFieldValidator.

    4/24/2003 Peter's Date Package v1.1.2 Update
    This release includes several design changes and bug fixes.
    • Design change. There is a new validator of DateTextBoxes. DateTextBoxDifferenceValidator calculates the number of days between two DateTextBoxes and compares it to the number of days you provide. Use it to determine if a range is within a minimum or maximum limit. For example, its invalid if the end date is larger than the start date by 30 days. Or its invalid if the end date is within 5 days of the start date.
    • Design change. DateTextBox has a new property, xReadOnlyAllowsPopupCalendarB. It lets you set the textbox to be ReadOnly while the calendar still pops up to edit. If you want to omit using validators, this interface makes the user select a date from the calendar which is always a valid date. The textbox is simply a display of the value, taking less room on the page than the traditional CS_Calendar.
    • When entering a time into a DurationTextBox, if you enter it as a decimal number starting with a period, it reformats to "NaN:NaN". For example, ".2".
    • When using xMinDate and xMaxDate on the MonthYearTextBox, initially all the months will be enabled when the currently selected year has some months outside the min/max date range.
    • When you select a date on CS_Calendar, it may show the wrong date in the DateTextBox or upon post back, report an ArgumentOutOfRangeException with these conditions: The Today date cell is shown on one of the cells that are before or after the viewed month. The user selects that cell.
    • When using CS_Calendar within a UserControl or other control that implements INamingContainer, post back will not retrieve the selecteddate. xSelectedDate will always be 1/1/1.
    • When using CS_Calendar, some property configurations will not allow xSelectedDate to return the current selection on postback. Instead xSelectedDate will return 1/1/1.
    • When using TimeOfDayTextBox or DurationTextBox with the hours/minute buttons, they may position incorrectly initially, especially on non-IE browsers. In addition, when you resize the browser window and the textbox moves, the buttons do not.
    • When using the TimeOfDayTextBox or DurationTextBox with a culture that use a period as the time separator (Italy for example), the commands to inc/dec the time give the wrong value and the returned time value is incorrect.
    • v1.1.1 broke normal use of arrow keys, DEL, Home and END in the DateTextBox. If these keys were not tied to a command, they did nothing instead of moving the cursor or removing a character.

    3/23/2003 Peter's Date Package v1.1.1 Update
    This release includes several new features and bug fixes.
    • Design change. SpecialDates control has a new property, xPrecedence, which determines what happens when dates overlap. Should the unselectable or selectable date be used?
    • Design change. CS_Calendar control has a new property, xAutoPostBackOnSelectionChangeB. When true, any change to the selected date posts back the page. Useful when something else on the page is related to the selected date.
    • Design change. CS_Calendar control has a new property, xAutoPostBackOnMonthViewChangeB. When true, any change to the month viewed posts back the page. Useful when using the SpecialDates control to allow it to load new dates for the month viewed. (Reduces the number of dates that you send to the browser.)
    • Design change. CS_Calendar control has a new event, OnMonthViewChanged. This event fires when using xAutoPostBackOnMonthViewChangeB and the user has changed the month. It provides you with the new and previous month selected.
    • When entering a date into DateTextBox without date separators, it properly reformats the date with separators but sometimes treats the date like an error was found. Easiest to see when DateTextBox.xErrorAlertOnChangeB is true.
    • TimeOfDayTextBox attached to a DateTextBox subtracts one day from the DateTextBox when the user uses the Next Hour or minute commands and they reach the end of the date. It should add one day.
    • An unusual <form> setup could trigger an error that reads "The Page lacks any controls between the <form> tags".
    • The Turkish culture code ("tr-TR") generates different lower case text for the HTTP_USER_AGENT which made it not possible to detect the IE browser. Servers running this culture code, and potentially others, make scale down controls as if its using a Netscape 4 browser.
    • Opera 7 put wide gaps between the arrow buttons of the TimeOfDayTextBox and DurationTextBox controls. (It stretches tables to 100% of the page when they don't have a width defined.) Forced a width to position the buttons properly.
    • TimeOfDayTextBox initially may show the wrong international symbol for the AM/PM descriptor when the current thread's descriptor is different from what you manually assign to TimeOfDayTextBox.xDateTimeFormatInfo.AMDescriptor.
    • TimeOfDayTextBox doesn't handle the AM/PM designator of Spanish speaking cultures properly. It reports validation errors and sets the maximum number of characters too small. The Spanish AM/PM designator includes periods and is more than 2 characters. Both were issues that are now resolved.
    • In cultures that use a 24 hour clock, their DateTimeFormatInfo.AMDescriptor and PMDescriptor may be blank. This confuses the TimeOfDayValidator. It will cause a time between 0 and 11:59 to add 12 hours.
    • When using the xSharedCalendarDateTextBoxID property on the DateTextBox, the keystroke and context menu command to popup the calendar doesn't work. It may report a JavaScript error if selected.
    • The TimeTextBoxCompareValidator sometimes reported an error when the conditions were valid with client-side validation. Requires that the TimeOfDayTextBox is connected to DateTextBoxes.

    3/2/2003 Peter's Polling Package v1.1.1 released
    This release only has enhancements. They are as follows:
    • The License file path can be overridden with either of these web.config file attributes: PPP_LicenseVirtualPath or PPP_LicenseFilePath.
    • The Submitted event has its arguments expanded to include the record ID of the selected answer when the user votes in the field fAnswerID.

    12/20/2002 Peter's Date Package v1.0.3 Released
    Here are the changes and bug fixes to v1.0.3:
    • Design change. When the user changes the date in CS_Calendar and it updates the DateTextBox, focus is returned to the textbox.
    • When the DateTextBox shows an error with a fore or back color and you hit the Today or Special commands, it should revert back to the original field colors.
    • When using DateTextBox.xAutoPostBackB, post back does not happen when the change comes from the popup calendar.
    • The QuickDateMenu handles relative dates whose PeriodType is Quarter incorrectly. Some dates are incorrect. When Today is in December, is throws an exception.
    • When using xMinDate or xMaxDate on CS_Calendar and CS_Calendar uses a server side interface, bottom borders are missing on some day cells that are outside the range.
    • When CS_Calendar.xTodaysDate is assigned, it is ignored when the calendar is drawn in design mode and in server side mode. It kept using DateTime.Today.
    • The CSC_GetDay JavaScript function, available for users programming, had a bug where it returned the month instead of the day.
    • Opera 7 reported a JavaScript error when there was a CS_Calendar (including within a DateTextBox) without any Help buttons. The context menu code initialization ran. Opera 7 doesn't support the right click context menu. So the variables were not initialized in Opera 7.
    • When CS_Calendar.xSpecialDate is assigned, its style sheet (xSpecialCssClass) is ignored when the calendar is drawn in design mode and in server side mode.
    • When CS_Calendar has xMinDate set to the first date of a month or xMaxDate to the last date of a month, the movement commands will allow going one month beyond the limits.
    • Due to a bug in the JavaScript compression program, DateTextBox.js was not fully compressed. It is now 6K smaller.

    11/27/2002 Peter's Date Package v1.0.2 Released
    The following are design changes and bugs fixed in v1.0.2:
    • Use a DataGrid to contain an EditItemTemplate with a DateTextBox. With SmartNavigation on, the popup calendar looks fine. But the PopupMonthYearPicker and ContextMenu within the calendar draw transparently making the calender see-through.
    • Add a DateTextBox to an absolutely positioned table that has a non-zero Left or Top position. Have a dropdownlist or listbox below it. Right click on the DateTextBox to get its context menu. Looks fine. Popup the calendar and it will be partially overwritten by the SELECT element. Refresh the page and open the calendar first. It will be fine but the DTB Context Menu will now have a problem with the SELECT element. This is further work started in v1.0.1.
    • IE Mac 5.1 now handles the popup calendar's position correctly when it is contained within a table. This is a workaround to a bug in that browser. However, IE Mac 5.0 still positions incorrectly. (The same fix really exposes some bugs in that browser's ability to position and size DIV tags.)
    • IE Mac positioned the QuickDateMenu incorrectly when contained within a table. (This fix is very different from the one above.)
    • Design change. You can provide an alternative path to the Licenses folder and the scripts folder with an entry into Web.Config. See the documentation.
    • If you had the DateTextBox visible but on a post back hid it via its Visible property or that of a parent control, the DateTextBox wouldn't preserve the value entered when it was a new page.
    • If any popup control is contained within a <DIV> with the overflow style set to show scrollbars, when the region is scrolled, clicking on a cell often closes the popup without taking the expected action. For example, the PopupCalendar will close without selecting the date you clicked on.

    11/20/2002 Peter's Date Package v1.0.1 Released
    Here are the changes and bug fixes in v1.0.1.
    • New feature. CS_Calendar now supports changing the first day of the week with the xFirstDayOfWeek property.
    • Now supports Opera v7.0 Beta 1. It's almost a full implementation of features (much better than previous Opera versions.) See documentation for limitations.
    • QuickDateMenu now becomes invisible with the DateTextBox to which its attached is also invisible.
    • CS_Calendar drew the bottom border around the top row of days in the previous month with the "OtherMonthBorderColor". It now draws that border with the current month border color.
    • The popups (calendar, monthyearpicker, context menu) will appear behind nearby drop down lists and listboxes on IE/Win browsers. IE 5+ has a design where it does not permit absolutely positioned above these fields. See http://support.microsoft.com/default.aspx?scid=KB;en-us;q177378
      This fix works in IE 5.5+, exploiting a design change with IFrames that was introduced in that version. IE 5.0 remains unchanged.
    • The popups (calendar, monthyearpicker, context menu) may appear behind other absolutely positioned controls whose Z-Index is greater than 2000. Updated these controls to have a Z-Index starting at 30000 and updated the Troubleshooting section of the docs to resolve this when users have Z-Indexes greater than 30000.
    • The popup calendar does not position correctly when inside an absolutely positioned DIV, such as the FlowLayoutPanel. Positioning code fixed.
    • The validators would not show up when positioned before the DateTextBox on the page.
    • The DateTextBox property xToolTipInStatusB doesn't work. It causes a JavaScript error due to a carriage return in the tooltip. It never assigns a valid tooltip to the status line.
    • After getting a validation error, a DateTextBox with xErrorBackColor or xErrorForeColor properties set will retain those colors when the user clears the field and makes the field lose focus. The field is valid when its blank and should restore itself to non-error colors.
    • On IE 5+ browsers, if you open a context menu or the popup calendar associated with the DateTextBox, then click in the textbox to close those objects, any typing in the textbox will be unfiltered (appears to be a bug in IE.) Fix sets focus during an onclick event.
    • If the popup calendar is contained within a hidden parent when the page is first loaded (hidden by the style "display=none"), its tables will be misaligned. The table width calculations run during page initialization but the display=none style gives it zeroes for current widths. That makes it impossible to calculate the widths. In this case, it delays calculating the widths until the first time it pops up (which imposes a slight delay on the first popup but only in this case.)
    • If you manually set xTrueBrowser.xSupportsCalendarB to false, the CS_Calendar will still show the PopupMonthYearPicker. When the user clicks, it won't popup (giving a JavaScript error if errors are on). The popup is dependant on the CSCalendar.js file being loaded which its not in this case. The fix hides the MonthYearPicker and Context menu (as it too requires the CS_Calendar file.)
    • CS_Calendar. When the WeekRows table lacks an outer border but has borders around each day and the CellSpacing is 0, some borders are missing on day cells that are along the outer frame. Affects design mode and server-side CS_Calendar mode.
    • If you use the @Page Culture property, it does not affect the xDateTimeFormatInfo property on any of the controls. The ASP.NET engine initializes the property after my controls do. My controls now delay their initialization to support the Culture property.

    10/18/2002 GroupValidator v1.0.3 released
    GroupValidator now includes a new validator, RequiredListControlValidator, which determines if any ListControl is checked or marked. It is similar to Microsoft's RequiredFieldValidator except that it supports CheckBoxLists, RadioButtonLists, DropDownLists, and ListBoxes.

    9/30/2002 Peter's Polling Package 1.0.3 released
    This release includes new functionality from customer requests.

    9/21/2002 Peter's Polling Package 1.0.2 released
    This update contains one enhancement and two bug fixes.

    8/24/2002 Peter's Polling Package 1.0.1 Released
    Bug fix: the Poll control did not accept votes when in a nested naming container more than 1 deep such as a Panel within a User Control.

    8/17/2002 PropertiesEditor 1.0.2 Released
    This release fixes a bug introduced in v1.0.1. When the xControlToView property is used, the control fails to attach to that control on post back.

    8/15/2002 DateTextBox Controls 1.0.9 Released
    Design changes (no bug fixes) all designed to work with empty text boxes. 1) The Text property now has a SET condition. It will take any short date formatted string that matches xDateTextFormatInfo.

    2) New property: xIsEmpty (boolean) Returns true if the TextBox is empty (after trimming)

    3) New method: SetEmpty. Clears the TextBox.

    8/15/2002 GroupValidator Controls 1.0.2 Released
    1) Moved the logic to get the client side evaluation function into a virtual method on GroupValidator. This allows users to subclass GroupValidator to support third party validators.

    2) Fixed a bug in SelectedIndexValidator where it generated a client side error when it was inside a naming container like a User Control or panel.

    3) Updated the documentation to explain how to support this new virtual method. See Step 6 of "Adding GroupValidator to your Web Form".

    4) Updated the documentation to have a new introduction.

    8/8/2002 DateTextBox Controls 1.0.8 Released
    1) Client side validation reports an error when lead zeros are entered for month and day of 08 and 09. The parseInt function treats lead zeros as "use octal". If the user enters 08 or 09, these are not valid octals. Added ParseDateElement function to enhance parseInt.

    2) When SetDateValue rebuilds the date, months and days that should have a lead zero do not.

    3) Netscape 4.x doesn't support the style=POSITION:relative code for the image. The image is turned off for this browser (even if your ClientTarget is uplevel)

    4) Netscape 4.x doesn't handle most of the client side scripting well because it doesn't have the element.getElementById function.
    So the client-side script scales down to keystroke filtering for digits and separator. There is no client-side validation or keyboard commands.

    5) Optimization in client side script DateTextBox_KeyPress

    8/5/2002 Properties Editor 1.0.1 released
    1) The Properties Editor has a new property. Use the xControlToView property to assign the ID of any control on your page that you want to view its properties.

    2) Provided a GAC compatible assembly without debugging symbols.

    3) Updated the licensing and contact information.

    4) Updated installation instructions within this documentation

    8/5/2002 Color Selector Controls 1.0.1 Released
    No code changes.
    1) Provided a GAC compatible assembly without debugging symbols.
    2) Updated the licensing and contact information.
    3) Updated installation instructions within this documentation

    8/5/2002 LengthValidators 1.0.3 released
    1) Provided a GAC compatible assembly without debugging symbols.

    2) Updated the licensing and contact information.

    3) Updated installation instructions within this documentation

    8/5/2002 GroupValidator 1.0.1 Released
    1) Provided a GAC compatible assembly without debugging symbols.
    2) Updated the licensing and contact information.
    3) Updated installation instructions within this documentation

    8/5/2002 SpacerImage 1.0.1 Released
    1) Provided a GAC compatible assembly without debugging symbols.

    2) Updated the licensing and contact information.

    3) Updated installation instructions within this documentation

    7/26/2002 LengthValidators 1.0.2 Released
    The LengthValidators both had a bug when using the Text property as well as the ErrorMessage property. The Text property is designed to allow a short message next to the control while the ValidationSummary shows the ErrorMessage.

    This bug fix lets both validators behave correctly, on client and server validation.