EditorFor () y AdditionalViewData: ¿cómo agregar datos en la clase auxiliar?

EditorFor () puede tomar unobject additionalViewData parámetro cuyo método típico para rellenar es algo como:

EditorFor(model => model.PropertyName, new { myKey = "myValue" })

¿Cómo puedo inspeccionar el contenido de AdditionalViewData, agregar o agregar al valor existente para una clave, etc. en un HTML Helper personalizado?

He probado estos enfoques:

convertir aDictionary<string, object>() y agregar / agregar valores: no funciona, ya que parece que la implementación de EditorFor en MVC usa el nuevo RouteValueDictionary (optionalViewData) que incrusta el diccionario dentro de un diccionarioconvertir a RouteValueDictionary usandonew RouteValueDictionary(additionalViewData) pero eso tiene el mismo problema (o muy similar) que el anterior

También estoy abierto a "lo estás haciendo mal", tal vez me estoy perdiendo un enfoque más simple. Tenga en cuenta que lo que estoy tratando de hacer es escribir un asistente de HTML que sea reutilizable y agregue algunos valores a los ViewViewtata adicionales para que los usen las vistas personalizadas. Algunos de los valores dependen de los metadatos de la propiedad, por lo que no es tan fácil como usar un montón de plantillas diferentes.

Update con un ejemplo de lo que estoy haciendo:

    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());
    }

Actualice con lo que sucede cuando convierto el objeto anónimo en unaDictionary<string, object>() y pasar ese diccionario aEditorFor():

Puse un punto de quiebre en la vista Razor y examiné ViewData. Parece que el diccionario pasó aEditorFor() se coloca dentro de otraDictionary<string, object>(). En la "Ventana Inmediata", ViewData se ve así:

ViewData.Keys
Count = 4
    [0]: "Comparer"
    [1]: "Count"
    [2]: "Keys"
    [3]: "Values"

¿Ves cómo el diccionario tiene el contenido de un diccionario dentro de él? Sí, los datos reales están en ese diccionario interno, sin embargo, como era de esperar, esto no funciona.

Recompensa agregada.

Respuestas a la pregunta(5)

Su respuesta a la pregunta