Jeśli mam konwencję zmienić edytor i ustawić niektóre wartościDodaj wartości ModelMetadata.AdditionalValues podczas korzystania 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;
}
//...
}
Następnie można uzyskać dodatkowe wartości w szablonie
@{
var min = ViewData.ModelMetadata.AdditionalValues["min"];
var max = ViewData.ModelMetadata.AdditionalValues["max"];
}
jednak , jeśli używam tego samego szablonu, takiego jak ten,
@Html.EditorFor(x => x.Number, new { min = 1, max = 10 })
Następnie powinienem otrzymać wartości takie jak to
@{
var min = ViewData["min"];
var max = ViewData["max"];
}
Mogę jakoś scalić additionalViewData i ModelMetadata.AdditionalValues abym mógł uzyskać wartości z jednego miejsca?
Czy mówisz, że nie możesz uzyskać wartości z widoku "ViewData" w widoku szablonu? –
Nie rozumiem twojego pytania. Parametry ViewData i ModelMetadata.AdditionalValues to dwie różne rzeczy. ViewData jest własnością kontrolera i ViewPage. AdditionalValues jest właściwością ModelMetadata. Oczywiście nie można ich połączyć. Jeśli chcesz pokazać wartości min i maksimum swojego atrybutu Range, polecam utworzyć pomocnika HTML. – ataravati