Можно ли поместить условный оператор в вызов Html.DisplayFor? - PullRequest
3 голосов
/ 27 октября 2010

В основном, у меня есть собственный класс «Дата» «EndDate» в моей выходной модели MVC. К вашему сведению: класс "Date" создает класс DateTime, но скрывает функциональность времени. Я создал шаблон отображения для этого типа Date, который красиво форматирует дату, но один раз (как показано ниже), если объектnull (в данном случае для EndDate) Я хотел бы вместо вывода текста «Дата окончания не указана».

<%:Html.DisplayFor(m => m.EndDate)%>

Я не могу изменить шаблон отображения, так как он является общим для всех экземпляров объекта Date, я не очень хочу менять и саму модель.По сути, я хочу что-то вроде:

<%:Html.DisplayFor((m => (m.EndDate == null) ? "No End Date Specified" : m.EndDate)%>

Возможно ли вышеизложенное в любой форме?Если нет, то что может быть лучше для реализации этой функциональности. Я думаю, даже если есть способ сделать это, если это не очень хорошая идея, пожалуйста, дайте мне знать, почему нет, и какой-нибудь лучший способ сделать это

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Попробуйте использовать UIHint .

[UIHint("CustomDateNull")]
public CustomDate EndDate { get;set; }

Затем создайте шаблон отображения CustomDateNull.ascx. Помощники будут искать UIHint перед тем, как вернуться к самому типу.

Если вы вообще не можете редактировать модель, вам придется прибегнуть к использованию RenderPartial и указанию даты в качестве модели для частичного просмотра.

0 голосов
/ 27 октября 2010

Знаете ли вы, что вы можете использовать более конкретный пользовательский шаблон, используя имя контроллера в структуре папок?

Вы, вероятно, создали: /Shared/DisplayTemplates/CustomDate.ascx Но для конкретного контроллера вы можете использовать: /MySpecific/DisplayTemplates/CustomDate.ascx

Теперь вам не нужно выполнять какие-либо динамические вызовы DisplayFor. Проблема, с которой вы столкнетесь, заключается в том, что DisplayFor действительно действительно хочет знать, из какого свойства какого типа объекта пришло выражение вашей модели, чтобы он мог искать метаданные. С лямбдой, как я уверен, вы нарушаете функциональность, которая находит доступ члена, а затем ищет метаданные из этого.

...