EditorFor() может принимать параметр object additionalViewData, который типичный метод для заполнения - это что-то вроде:
 EditorFor(model => model.PropertyName, new { myKey = "myValue" })
Как я могу проверить содержимое дополнительныхViewData, добавить или добавить существующее значение для ключа и т.д. в пользовательский HTML-помощник?
Я пробовал эти подходы:
-  конвертировать в 
Dictionary<string, object>()и добавлять/добавлять значения: не работает, поскольку похоже, что реализация EditorFor в MVC использует новый RouteValueDictionary (дополнительныйViewData), который вставляет словарь в словарь -  конвертировать в RouteValueDictionary с помощью 
new RouteValueDictionary(additionalViewData), но имеет такую же (или очень похожую) проблему, как указано выше 
Я также открыт для "вы делаете это неправильно" - может быть, мне не хватает более простого подхода. Имейте в виду, что я пытаюсь написать HTML-помощник, который многократно используется, и добавляет некоторые значения в дополнительныйViewData, который будет использоваться пользовательскими представлениями. Некоторые из значений зависят от метаданных от свойства, поэтому это не так просто, как просто использовать кучу разных шаблонов.
Обновите пример того, что я делаю:
    public static MvcHtmlString myNullableBooleanFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> choice, string templateName, object additionalViewData)
    {            
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(choice, htmlHelper.ViewData);
        /*
    here need to add to additionalViewData some key values among them:
    { propertyName, metadata.PropertyName }
     */
        StringBuilder sb = new StringBuilder();
        sb.AppendLine(htmlHelper.EditorFor(choice, templateName, additionalViewData).ToString());
        MvcHtmlString validation = htmlHelper.ValidationMessageFor(choice);
        if (validation != null)
            sb.AppendLine(validation.ToString());
        return new MvcHtmlString(sb.ToString());
    }
Обновление с тем, что происходит, когда я конвертирую анонимный объект в Dictionary<string, object>() и передаю этот словарь в EditorFor():
Я поставил точку останова в представлении Razor и рассмотрел ViewData. Похоже, что словарь, переданный в EditorFor(), помещается внутри другого Dictionary<string, object>(). В "Немедленном окне" ViewData выглядит следующим образом:
ViewData.Keys
Count = 4
    [0]: "Comparer"
    [1]: "Count"
    [2]: "Keys"
    [3]: "Values"
Посмотрите, как словарь содержит содержимое словаря внутри него? Да, фактические данные в этом внутреннем словаре, однако, неудивительно, это не работает.
Добавлена награда.