Повторное использование MVC View как для отображения данных, так и для редактирования данных - PullRequest
4 голосов
/ 15 декабря 2011

У меня есть два вида MVC ... один для отображения деталей и один для редактирования значений. Они используют почти идентичные шаблоны, за исключением того, что DisplayFor изменяется на EditorFor при переключении в представление редактора. Как я могу повторно использовать мою базовую структуру макета в представлении, чтобы при необходимости изменения базового макета мне приходилось делать это только в одном месте, а не в нескольких представлениях?

Вот пример таблицы, используемой в представлении дисплея:

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

Ответы [ 3 ]

3 голосов
/ 15 декабря 2011

Вы можете добавить свойство 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>
1 голос
/ 04 октября 2012

Или вы можете использовать что-нибудь более чистое для этой работы, например Razor helper

public bool IsInEditMode { get; set; }

@helper EditorFor(System.Linq.Expressions.Expression<Func<ViewModel, string>> exp)
{   
    @((Model.IsInEditMode )  ? @Html.EditorFor(exp) : @Html.DisplayFor(exp))
}
0 голосов
/ 20 августа 2014

Иметь динамическое представление, которое проверяет идентификатор вашей сущности. Бритва потрясающая! если 0 или ноль, это новый объект, иначе вы в режиме редактирования.

Условная бритва!

...