В MVC 3, как мне заставить связующее устройство модели по умолчанию обрабатывать пустые строки как «Пустые», а не «нулевые»?

#asp.net-mvc #poco #model-binding

#asp.net-mvc #poco #привязка модели

Вопрос:

Я использую Entity Framework Code-First с POCOs для взаимодействия с базой данных. У меня есть необязательное поле с именем «Title».

Когда я получаю объект из формы, привязка модели по умолчанию автоматически делает «Заголовок» нулевым вместо пустого.

Как мне заставить привязку модели возвращать пустую строку вместо null?

Спасибо за любую помощь

Комментарии:

1. Почему бы не иметь дело с null в модели представления или контроллере? простой var result = foo.title ?? string.Empty; сделает это, нет?

2. Потому что это нарушило бы DRY (не повторяйтесь.) Я получаю эту модель из нескольких мест, и мне придется повторять проверки нулевой строки во всех из них.

3. Не могли бы вы создать частичный метод (OnTitleChanging), который выполняет проверку, рекомендованную Balar? Это будет сделано в одном месте, отдельно от вашего файла edmx (чтобы он не перезаписывался) и должен выполнить то, что вам нужно.

4. Установите значение title как string . Пусто; в конструкторе вашего объекта POCO / Model.

5. @Mark, установка значения в конструкторе не поможет, поскольку связующее устройство модели по умолчанию впоследствии вызовет установщик свойства. Но вы могли бы изменить поведение конкретного установщика (если null не является возможным значением) и преобразовать null в String . Пусто.

Ответ №1:

Старый вопрос, но в MVC4 вы можете добавить это в свое свойство POCO:

 [DisplayFormat(ConvertEmptyStringToNull = false)]
  

Комментарии:

1. Прохладный. Спасибо за публикацию этого.

Ответ №2:

Вы запрашиваете нестандартное поведение, поэтому вам нужно нестандартное решение. Расширьте привязку модели по умолчанию, переопределите ее метод CreateModel — делайте то, что вы хотите для конкретных случаев, и возвращайте base.CreateModel для других.

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