2013-03-12 39 views
6

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?

+0

Sie sagen, Sie können die Werte von 'ViewData' nicht in Ihrer Vorlagenansicht abrufen? –

+0

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

Antwort

0

Ich habe ehrlich gesagt nicht versucht zu sehen, ob die AdditionalValues ​​richtig gezogen werden, aber was sieht die eingebaute für Sie aus Ihrer Sicht?

@using System.Web.Mvc 

    @{ 
     var meta = ModelMetadata.FromLambdaExpression(model => model, ViewData); 
    } 
Verwandte Themen