3

在 .Net MVC 中,我们使用编辑器模板来输出 HTML。因此,在视图中,我们编写如下内容,字符串的编辑器模板(描述是一个字符串对象)输出正确的 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;
   }
}
4

1 回答 1

2

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

 @ViewData.ModelMetadata.PropertyName

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

于 2014-02-17T21:18:24.443 回答