2015-10-18 39 views
0

我有一个数据模型的一打属性,说value1,value2,value3(实际上他们有有意义的名字,但这里不重要)。复杂的剃刀功能或帮手

在我的显示器,我需要做的每个值如下:

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

这对他们的一打。

我想创造一个@function或@helper和代码简化成类似:

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

,但无法弄清楚如何做到这一点。

有什么想法?我想我需要一个接受表达式的函数,但我真的不知道如何编码。

回答

0

检查这个辅助

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()); 
    } 
} 

,并在您的视图中使用它像

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

完美的作品!谢谢。 –

+0

欢迎您:) –