我已经在~/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") …Run Code Online (Sandbox Code Playgroud) 我EditorFor()在我的视图中使用帮助器来渲染编辑模板,我想调用DisplayFor()内部的这个模板来渲染显示模板.
像这样
这是在/Shared/EditorTemplates/Client.ascx中
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<BusinessNext.Models.Ef.Client>" %>
<%: Html.DisplayFor(client=>client) %>
Run Code Online (Sandbox Code Playgroud)
在DisplayFor模板中,我渲染出客户端的属性.DisplayFor模板在从其他地方调用时工作得很好,但是从EditorFor模板调用它不会渲染任何东西.似乎DisplayFor()调用从未真正进入DisplayFor模板.