Sitecore Experience Forms formerly known as Web Forms for Marketers (WFFM) allows Content Authors to construct web forms that record and report information provided by contacts on a website - ideally without the need for additional development.
The integrated nature of Sitecore Experience Forms requires some pipeline and HTTP life-cycle overrides specifically around GET and POST requests. This can lead to issues when dealing with partial query strings as Sitecore makes the assumption that all keys have a corresponding value - this is not the case nor is it enforced by many frameworks.
Placing a partial query string eg. /?sample into the URL for any page with a Sitecore form will cause the following exception:
Exception: System.ArgumentNullException Message: Value cannot be null. Parameter name: key Source: mscorlib at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer) at Sitecore.ExperienceForms.Mvc.Pipelines.RenderForm.SetFormParameters.Process(RenderFormEventArgs args) at (Object , Object ) at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
The exception above is thrown from the SetFormParameters pipeline located in the Sitecore.ExperienceForms.Mvc namespace as shown below:
It's attempts to parse the query string fail due to missing value parameters. This particular line also fails to map multiple values for a given key. By applying the changes below it can be updated to handle both partial and multiple query string cases: