Dan*_* A. 10 c# asp.net-mvc asp.net-mvc-3
我已经在~/Views/Shared/DisplayTemplatesnamed中创建了一个显示模板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>
Run Code Online (Sandbox Code Playgroud)
它很容易重复使用,效果很好.我可以在我的视图中调用它,如下所示:
@Html.DisplayFor(m=> m.ImpactFactor, "ImpactMatrix")
Run Code Online (Sandbox Code Playgroud)
现在我决定扩展它并使其成为编辑器.我们的想法是为所选数字添加隐藏输入,并使用div将输入与矩阵模板一起包装.从那里开始使用Javascript与我的显示网格交互并填充隐藏的输入应该是一件简单的事情.
我ImpactMatrix.cshtml在我的~/Views/Shared/EditorTemplates文件夹中创建了一个名为的编辑器模板.这是代码:
@model int?
<div class="impactmatrix-editor">
@Html.HiddenFor(m => m)
@Html.DisplayFor(m => m, "ImpactMatrix")
</div>
Run Code Online (Sandbox Code Playgroud)
我的问题是隐藏的输入正确呈现,但嵌套的显示模板不会在我的编辑器模板中呈现.我正在尝试做什么?
目前好像不支持。
Html.Partial但是,我找到了使用本文中的解决方案: Nested @Html.DisplayFor(model => baseClass, "BaseClass") 对于基类模板不呈现
像这样重写你的编辑器模板:
@model int?
<div class="impactmatrix-editor">
@Html.HiddenFor(m => m)
@Html.Partial("~/Views/Shared/DisplayTemplates/ImpactMatrix.cshtml", Model)
</div>
Run Code Online (Sandbox Code Playgroud)
注意:@Paul Hadfield 在我上面提到的文章中评论了这个问题,该问题已在 ASP MVC 4 中修复。但即使我在我的 PC 上运行这个版本,我也无法使嵌套模板工作。