2013-03-12 13 views
6

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?

+0

Czy mówisz, że nie możesz uzyskać wartości z widoku "ViewData" w widoku szablonu? –

+0

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

Odpowiedz

0

Szczerze mówiąc, nie próbowałem sprawdzić, czy wartości dodatkowe są poprawnie przyciągane, ale co zapewnia wbudowany w Ciebie widok?

@using System.Web.Mvc 

    @{ 
     var meta = ModelMetadata.FromLambdaExpression(model => model, ViewData); 
    } 
Powiązane problemy