可以在编辑器模板中调用显示模板吗?

时间:2013-01-29 02:15:21

标签: c# asp.net-mvc asp.net-mvc-3

我在名为~/Views/Shared/DisplayTemplates的{​​{1}}中创建了一个显示模板。它接受一个可空的int并呈现一个二维矩阵,其中突出显示所选的数字:

ImpactMatrix.cshtml

它易于重复使用且效果很好。我可以在我的视图中调用它:

@model int?

@{
    var matrix = ImpactMatrix.GetMatrix();
}   

<div class="impactmatrix">
  <table>
    @for (int i = 0; i < matrix.GetLength(0); i++)
    { 
        <tr>
          @for (int j = 0; j < matrix.GetLength(1); j++)
          {
              var cell = matrix[i, j];
              <td data-color="@cell.Color" 
                class="matrix @(Model == cell.Value ? cell.Color.ToString() : "")">
                    @cell.Value
              </td>
          }
        </tr>
    }
    </table>
</div>

现在我决定将其扩展并使其成为编辑。我们的想法是为所选数字添加隐藏输入,并使用div将输入与矩阵模板一起包装。从那里开始,使用Javascript与我的显示网格进行交互并填充隐藏的输入应该是一件简单的事情。

我在@Html.DisplayFor(m=> m.ImpactFactor, "ImpactMatrix") 文件夹中创建了一个名为ImpactMatrix.cshtml的编辑器模板。这是代码:

~/Views/Shared/EditorTemplates

我的问题是隐藏的输入呈现正确,但嵌套的显示模板不会在我的编辑器模板中呈现。我正在尝试做什么?

1 个答案:

答案 0 :(得分:3)

似乎目前不支持

但是,我在本文中使用Html.Partial找到了解决方案:Nested @Html.DisplayFor(model => baseClass, "BaseClass") for base class template not rendering

重写你的编辑器模板:

@model int?

<div class="impactmatrix-editor">
    @Html.HiddenFor(m => m)
    @Html.Partial("~/Views/Shared/DisplayTemplates/ImpactMatrix.cshtml", Model)
</div>

注意:@Paul Hadfield在我上面提到的文章中评论了这个问题,这个问题已经针对ASP MVC 4修复了。但是即使我在我的PC上运行这个版本,我也无法使嵌套模板有效。