private static object BindChoice(ModelBindingContext bindingContext)
        {
            Type choiceType = bindingContext.ModelType.GetGenericArguments().FirstOrDefault();

            if (choiceType == null)
            {
                return(null);
            }

            string valueKey = string.Format("{0}.Id", bindingContext.ModelName);
            var    provider = bindingContext.ValueProvider.GetValue(valueKey);

            string attemptedValue = provider != null ?
                                    provider.AttemptedValue :
                                    null;

            var choice = bindingContext.Model ??
                         Activator.CreateInstance(typeof(Choice <>).MakeGenericType(choiceType));

            if (!string.IsNullOrEmpty(attemptedValue))
            {
                int  id      = default(int);
                bool success = false;

                try
                {
                    id      = int.Parse(attemptedValue);
                    success = true;
                }
                catch (FormatException ex)
                {
                    bindingContext.ModelState.AddModelError(bindingContext.ModelName, ex);
                }

                if (success)
                {
                    var viewModel = Activator.CreateInstance(choiceType) as IEntityViewModel;
                    if (viewModel != null)
                    {
                        viewModel.Id = id;
                    }

                    GenericHelpers.SetChoiceSelection(choiceType, choice, viewModel);
                }
            }

            return(choice);
        }