4

私は 2 つの MVC ビューを持っています... 1 つは詳細を表示するためのもので、もう 1 つは値を編集するためのものです。エディター ビューに切り替えるときに DisplayFor が EditorFor に変更されることを除いて、ほとんど同じテンプレートを使用します。基本レイアウトを変更する必要がある場合に、複数のビューではなく 1 つの場所で行うだけでよいように、ビューで基本レイアウト構造を再利用するにはどうすればよいですか?

表示ビューで使用されるテーブルのサンプルを次に示します。

<table>
  <tr>
    <td class="label">First Name:</td>
    <td class="field">@Html.DisplayFor(x => Model.FirstName)</td>
  </tr>
  <tr>
    <td class="label">Last Name:</td>
    <td class="field">@Html.DisplayFor(x => Model.LastName)</td>
  </tr>
  <tr>
    <td class="label">Email:</td>
    <td class="field">@Html.DisplayFor(x => Model.Email)</td>
  </tr>
</table>
4

3 に答える 3

3

View Model に Mode プロパティを追加できます。

public bool IsInEditMode { get; set; }

次に、コントローラーは同じビューとモデルを使用でき、それに応じてこのプロパティを設定します。ビューは次のようになります。

<table>
  <tr>
    <td class="label">First Name:</td>
    <td class="field">
        @if (!Model.IsInEditMode)
        {
            @Html.DisplayFor(x => Model.FirstName)
        }
        else
        {
            (render EditorFor plus any validation helpers)
        }
    </td>
  </tr>
  ...etc...
</table>
于 2011-12-15T19:46:31.777 に答える
2

または、Razor ヘルパーのようなこのジョブにクリーンなものを使用できます

public bool IsInEditMode { get; set; }

@helper EditorFor(System.Linq.Expressions.Expression<Func<ViewModel, string>> exp)
{   
    @((Model.IsInEditMode )  ? @Html.EditorFor(exp) : @Html.DisplayFor(exp))
}
于 2012-10-04T13:43:45.503 に答える
0

エンティティの ID をチェックする動的ビューを用意します。かみそりは素晴らしいです!0 または null の場合は新しいエンティティであり、それ以外の場合は編集モードです。

かみそり条件付き!

于 2014-08-20T18:35:36.070 に答える