.Net MVC在编辑器模板中获取Lambda表达式

时间:2013-11-05 09:01:58

标签: asp.net-mvc linq lambda

在.Net MVC中,我们使用编辑器模板输出HTML。因此,在View中我们编写类似下面的内容,并且String的Editor Template(Description是一个字符串对象)输出正确的HTML和字符串类型的控件:

@Html.EditorFor(model => model.Entity.Description)

我想创建一个能够使用\重新创建我在视图中使用的Lambda表达式的编辑器模板,即model.Entity.Description。在编辑器模板中,我可以在这种情况下检索属性名称描述但是我希望能够在我在视图中使用的编辑器模板中检索Lambda表达式,即model => model.Entity.Description 下面是一个示例编辑器模板 - 我想动态地用相关表达式替换MYLAMBDAEXPRESSIONHERE,即model => model.Entity.Description:

@model IDictionary Fields //Or some object that also contains the lambda expression 
@using System.Collections;
@using System.Collections.Generic;
@using Mallon.Core.Artifacts;

@{
   var fieldName = ViewData.TemplateInfo.HtmlFieldPrefix;
   FieldAccessOptionality access = (FieldAccessOptionality)Model[fieldName];

   switch(access)
   {
      case FieldAccessOptionality.None:
         break;
      case FieldAccessOptionality.Mandatory:
         <div class="editor-label">
            @Html.LabelFor(MYLAMBDAEXPRESSIONHERE)
         </div>
         <div class="editor-field">
            @Html.EditorFor(MYLAMBDAEXPRESSIONHERE)
            @Html.ValidationMessageFor(MYLAMBDAEXPRESSIONHERE)
         </div>
      break;
   }
}

1 个答案:

答案 0 :(得分:2)

您无法访问模板中的lambda表达式,但可以使用ModelMetadata获取更多信息。例如,

 @ViewData.ModelMetadata.PropertyName

为您提供属性名称。在您的示例中,“描述”。