2013-03-12 10 views
6

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?

+0

Stai dicendo che non riesci a ottenere i valori da 'ViewData' nella visualizzazione Modello? –

+0

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

risposta

0

Onestamente non ho provato a vedere se gli AdditionalValues ​​vengono tirati correttamente, ma cosa offre il built-in per la visualizzazione?

@using System.Web.Mvc 

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