Se ho una convenzione per cambiare l'editor e impostare alcuni valoriAggiungere valori da ModelMetadata.AdditionalValues quando si utilizza EditorFor
public class MetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, System.ComponentModel.PropertyDescriptor propertyDescriptor)
{
var meta = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor);
if (IsNumericType(propertyDescriptor.PropertyType))
{
meta.TemplateHint = "Number";
var attr = propertyDescriptor.Attributes.OfType<RangeAttribute>().FirstOrDefault();
if (attr != null)
{
meta.AdditionalValues["min"] = attr.Minimum;
meta.AdditionalValues["max"] = attr.Maximum;
}
}
return meta;
}
//...
}
Poi posso ottenere i valori aggiuntivi nel modello
@{
var min = ViewData.ModelMetadata.AdditionalValues["min"];
var max = ViewData.ModelMetadata.AdditionalValues["max"];
}
Tuttavia , se uso lo stesso modello come questo
@Html.EditorFor(x => x.Number, new { min = 1, max = 10 })
Quindi dovrei ottenere i valori come questo
@{
var min = ViewData["min"];
var max = ViewData["max"];
}
Posso in qualche modo unire additionalViewData e ModelMetadata.AdditionalValues in modo che potessi ottenere i valori da un posto?
Stai dicendo che non riesci a ottenere i valori da 'ViewData' nella visualizzazione Modello? –
Non capisco la tua domanda. ViewData e ModelMetadata.AdditionalValues sono due cose diverse. ViewData è una proprietà di Controller e ViewPage. AdditionalValues è una proprietà di ModelMetadata. Certo, non possono essere uniti. Se vuoi mostrare i valori minimo e massimo del tuo Range Attribute, ti consiglio di creare un Helper HTML. – ataravati