Wenn ich eine Konvention haben den Editor zu ändern und einige Wertebei der Verwendung von 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;
}
//...
}
Dann kann ich die zusätzlichen Werte in der Vorlage erhalten
@{
var min = ViewData.ModelMetadata.AdditionalValues["min"];
var max = ViewData.ModelMetadata.AdditionalValues["max"];
}
jedoch Wenn ich dieselbe Schablone wie diese verwende
@Html.EditorFor(x => x.Number, new { min = 1, max = 10 })
Dann sollte ich die Werte wie bekommen diese
@{
var min = ViewData["min"];
var max = ViewData["max"];
}
Kann ich fusionieren irgendwie additionalViewData und ModelMetadata.AdditionalValues, so dass ich die Werte von einem Ort zu bekommen?
Sie sagen, Sie können die Werte von 'ViewData' nicht in Ihrer Vorlagenansicht abrufen? –
Ich verstehe deine Frage nicht. ViewData und ModelMetadata.AdditionalValues sind zwei verschiedene Dinge. ViewData ist eine Eigenschaft von Controller und ViewPage. AdditionalValues ist eine Eigenschaft von ModelMetadata. Natürlich können sie nicht zusammengeführt werden. Wenn Sie die Min- und Max-Werte Ihres Range-Attributs anzeigen möchten, empfehle ich, einen Html-Helper zu erstellen. – ataravati