10

~/Views/Shared/DisplayTemplatesnamedに表示テンプレートを作成しましたImpactMatrix.cshtml。null 許容の int を受け入れ、選択した数値が強調表示された 2 次元マトリックスをレンダリングします。

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

エディタ テンプレートを次のように書き換えます。

@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 に答える