10

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

@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>

它很容易重复使用并且效果很好。我可以像这样在我的视图中调用它:

@Html.DisplayFor(m=> m.ImpactFactor, "ImpactMatrix")

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

ImpactMatrix.cshtml在我的~/Views/Shared/EditorTemplates文件夹中创建了一个编辑器模板,也命名为 。这是代码:

@model int?

<div class="impactmatrix-editor">
    @Html.HiddenFor(m => m)
    @Html.DisplayFor(m => m, "ImpactMatrix")
</div>

我的问题是隐藏输入正确呈现,但嵌套显示模板未在我的编辑器模板中呈现。我正在尝试做的事情可能吗?

4

1 回答 1

4

好像目前不支持

但是,我找到了使用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 上运行这个版本,我也无法使嵌套模板工作。

于 2013-02-01T13:46:32.630 回答