2015-10-18 3 views
0

J'ai un modèle de données avec une douzaine de propriétés, par exemple value1, value2, value3 (en fait, ils ont des noms significatifs mais ce n'est pas important ici).fonction de rasoir complexe ou helper

Dans mon écran, je dois faire ce qui suit pour chaque valeur:

@if (Model.Value1 >= 2) 
{ 
    <div class="col-sm-6 test-box-item"> 
     <h5>@Html.DisplayNameFor(_ => Model.Value1)</h5> 
     <div>@Model.Value1</div> 
    </div> 
} 

Ceci pour une douzaine d'entre eux.

Je voulais créer un ou @helper et @function simplifier le code à quelque chose comme:

DisplayValue(_ => Model.Value1) 
DisplayValue(_ => Model.Value2) 
... 

mais ne pouvait pas comprendre comment faire.

Une idée? Je suppose que j'ai besoin d'une fonction qui accepte une expression, mais je ne sais vraiment pas comment coder cela.

Répondre

0

vérifier cette aide

public static class HmtlExtensions 
{ 
    public static HtmlString DisplayValue<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression) 
    { 
     if (expression == null) 
      throw (new ArgumentNullException("expression")); 

     var result = new StringBuilder(); 

     ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData); 

     // get value 
     var _value = metadata.Model.ToString(); 

     int value = 0; 
     if (int.TryParse(_value, out value) && value >= 2) 
     { 
      result.Append("<div class=\"col-sm-6 test-box-item\"><h5>"); 
      result.Append(helper.DisplayNameFor(expression)); 
      result.Append("</h5><div>"); 
      result.Append(_value); 
      result.Append("</div></div>"); 
     } 

     return MvcHtmlString.Create(result.ToString()); 
    } 
} 

et à votre avis l'utiliser comme

@Html.DisplayValue(x => x.Value1) 
@Html.DisplayValue(x => x.Value2) 
@Html.DisplayValue(x => x.Value3) 
+0

fonctionne parfaitement! Merci. –

+0

vous êtes les bienvenus :) –