Почему Мой EditorTemplate исполняется, даже когда свойство равно NULL? - PullRequest
1 голос
/ 07 ноября 2011

У меня есть такая модель:

public class ParentViewModel
{
   public class ChildViewModel { get; set; }
   // other properties
}

Затем в представлении для ParentViewModel я делаю это:

@Html.EditorFor(model => model.ChildViewModel)

И он выполняет мой шаблон пользовательского редактора, даже когда Model.ChildViewModel равен null. Зачем? Я думал, что MVC достаточно умен, чтобы отображать представление / шаблон только тогда, когда он имеет значение. (например, шаблон по умолчанию для null - ничего не отображать).

Потому что на данный момент мне нужно было бы обернуть HTML в моем шаблоне редактора:

@if (Model != null)

Что кажется очень глупым.

Это известная проблема?

Я в ASP.NET MVC 3, Razor.

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Вместо того, чтобы проверять нулевое значение перед частичным или внутренним, вы можете использовать новый метод расширения.Это также дает вам больше возможностей для работы с нулевой моделью.Вот расширения, которые я использую, он проверит на нулевое значение и либо возвратит пустую строку, либо другой частичный результат с нулевым результатом.Это может быть особенно полезно для таких вещей, как пейджеры, где страница выходит за пределы допустимого диапазона, поскольку вы можете иметь отдельный фрагмент с вашей информацией «без результатов».

Извините, я неправильно сформулировал вопрос о EditorTemplates.Однако я не вижу причин, по которым тот же подход не может работать для EditorFor, у вас есть только несколько сигнатур методов для репликации.

1 голос
/ 07 ноября 2011

Я не думаю, что MVC такой умный. Ожидается, что если вы вызовете метод рендеринга (displayFor, EditFor, Partial) и отправите ему модель, то эта модель будет иметь значение (иначе NullReferenceException). Насколько я знаю, вы можете выбрать:

  1. Либо есть 2 разных вида (возможно, 2 разных модели вида?)
  2. Вы модель! = Проверка нуля
  3. Используйте метод renderAction, передающий параметр из вашей основной модели, который позволяет этому действию знать, следует ли вам возвращать представление / частичное представление или ничего не возвращать.
...