【问题标题】:Can a display template be invoked from within an editor template?可以从编辑器模板中调用显示模板吗?
【发布时间】:2013-01-29 02:15:20
【问题描述】:

我在~/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 与我的显示网格交互并填充隐藏的输入应该是一件简单的事情。

我在~/Views/Shared/EditorTemplates 文件夹中创建了一个编辑器模板,也称为ImpactMatrix.cshtml。代码如下:

@model int?

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

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

【问题讨论】:

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


    【解决方案1】:

    似乎目前不支持

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

    【讨论】:

    • 感谢您的信息和链接!我认为它在 MVC3 中不受支持。我必须在 MVC4 中尝试一下,看看会发生什么。
    • NP。如果您成功使用 MVC4 和嵌套模板,请给出回应。无论如何,我展示的解决方法适用于自 MVC2 以来的所有版本。
    • 解决方法对我有用。谢谢。我也有 MVC4,嵌套模板不起作用。这是一个主要限制,需要修复。
    • 在尝试将显示模板嵌套在同一模型的另一个显示模板中时,我不得不使用此解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多