C# 可以从编辑器模板中调用显示模板吗?

C# 可以从编辑器模板中调用显示模板吗?,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我在~/Views/Shared/DisplayTemplates中创建了一个名为ImpactMatrix.cshtml的显示模板。它接受一个可为空的整数,并呈现一个二维矩阵,其中所选数字高亮显示: @model int? @{ var matrix = ImpactMatrix.GetMatrix(); } <div class="impactmatrix"> <table> @for (int i = 0; i < matrix.G

我在
~/Views/Shared/DisplayTemplates
中创建了一个名为
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与我的显示网格交互并填充隐藏输入应该是一件简单的事情

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

@model int?

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

我的问题是隐藏的输入渲染正确,但嵌套的显示模板不会在编辑器模板内渲染。我想做的事情可能吗?

目前似乎不支持它

但是,我在本文中使用
Html.Partial
找到了一个解决方案:

按如下方式重写编辑器模板:

@model int?

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

注意:@paulhadfield在我上面提到的文章中评论了这个问题,这个问题已经为ASP MVC 4解决了。但是,即使我在电脑上运行此版本,我也无法使嵌套模板正常工作。

感谢您提供的信息和链接!我认为MVC3不支持它。我必须在MVC4中尝试,看看会发生什么。如果成功使用MVC4和嵌套模板,请给出回应。不管怎样,我展示的变通方法适用于MVC2之后的所有版本。变通方法适用于我。谢谢我也有MVC4,嵌套的模板不起作用。这是一个主要限制,需要修复。我在尝试将同一模型的显示模板嵌套到另一个显示模板时,必须使用此解决方法。
@model int?

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