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

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

Однако я обнаружил, что для строго типизированного представления, в котором пользователь вводит свойства объекта, который я хочу сохранить, если некоторые поля не введены, им присваивается значение null.

Затем, когда вы пытаетесь сохранить изменения, проверка не выполняется.

Итак, вместо того, чтобы устанавливать для каждого свойства пустую строку, как я могу автоматически установить для каждого TextBox в форме значение по умолчанию для пустой строки, а не для нуля?


person arame3333    schedule 13.08.2010    source источник
comment
Я всегда считал, что как можно больше избегать нулей, является странной вещью. Нуль - прекрасная вещь. В строке записи таблицы базы данных есть столбец, допускающий значение NULL, и он имеет значение NULL, что означает отсутствие значения, которое когда-либо предоставлялось ранее. Эти знания так важны для бизнес-правил и логики компаний, которые я обнаруживаю снова и снова.   -  person Brian Ogden    schedule 03.09.2014
comment
Я вижу, что нули полезны при вычислении среднего для диапазона чисел. Также null подходит для дат, которые еще не были введены. В противном случае, почему ноль лучше, чем пустая строка или ноль? Кажется, все, что он делает, - это сгенерировать больше стандартного кода, чтобы остановить нежелательные исключения нулевой ссылки.   -  person arame3333    schedule 04.09.2014
comment
Это хороший момент, хотя вместо проверки на null в большинстве одних и тех же мест, чтобы предотвратить нежелательные исключения нулевых ссылок, вы проверяете if! EmptyString). Исключения нулевой ссылки устаревают, но они могут быть хорошим уровнем контроля / тестирования качества. Передается пустая строка, без исключения, но она не должна быть пустой, null вызывает исключение, и, таким образом, разработчик, возможно, быстрее обнаруживает ошибки. Забавно, я ненавижу видеть пустые строковые столбцы в результатах Sql Select lol   -  person Brian Ogden    schedule 05.09.2014
comment
comment
Я задал этот вопрос первым, поэтому второй вопрос может быть моим дубликатом.   -  person arame3333    schedule 14.10.2016


Ответы (4)


Вы можете поместить следующий атрибут в свои строковые свойства в своей модели:

[DisplayFormat(ConvertEmptyStringToNull=false)]

Поэтому всякий раз, когда кто-то публикует форму с пустыми текстовыми полями, это будет пустая строка вместо нуля ...

person Yngve B-Nilsen    schedule 13.08.2010
comment
это то, что я ищу. Спасибо @Yngve B. Nilsen - person Haider Ali Wajihi; 08.03.2014

Честно говоря, я бы сказал, что ваша методология кодирования устарела и ошибочна. Вы должны использовать все возможности, это несложно. Именно для этого string.IsNullOrEmpty(value);.

Я предполагаю, что ваша логика проверки выглядит примерно так:

if (value == string.Empty) { isValid = false; } 

Таким образом, он не обрабатывает нулевые значения. Вы должны заменить эту проверку, чтобы она также проверяла нули.

string value1 = null;
string value2 = string.Empty;

string.IsNullOrEmpty(value1); // true
string.IsNullOrEmpty(value2); // true
person djdd87    schedule 13.08.2010
comment
Я вижу, что мой вопрос непонятен. Я ищу ответ, связанный с метаданными или расширенным шаблоном. Это вопрос MVC, а не вопрос C #. - person arame3333; 13.08.2010
comment
Разместите код в своем вопросе, чтобы мы могли видеть, что вы собираетесь делать. - person djdd87; 13.08.2010
comment
Я не уверен, какой код могу вам показать. У меня есть некоторые текстовые поля в представлении, и если пользователь не вводит значение перед отправкой, они по умолчанию равны нулю. Если поля в базовой модели НЕ допускают значения NULL, это приводит к сбою проверки. Я нашел ответ на этот вопрос о SO; stackoverflow.com/questions/1718501/ Вместо обрезки я просто установил нулевую строку на пустую строку. Я доволен таким ответом, но, может быть, есть ответ попроще? - person arame3333; 13.08.2010

Альтернативным решением использования атрибутов для каждого свойства модели, как описано в принятом ответе, является использование настраиваемого связывателя модели, см. string.empty преобразуется в null при передаче объекта JSON в контроллер MVC

person Anders    schedule 16.01.2013

Я столкнулся с этой проблемой, когда имел дело со старой службой, требующей пустых строк. Я создал метод расширения:

public static string GetValueOrDefault(this string str)
        {
            return str ?? String.Empty;
        }

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

yourString1.GetValueOrDefault();
yourString2.GetValueOrDefault();
person user3645143    schedule 17.09.2014