web-dev-qa-db-ja.com

nullではなくTextBoxの空の文字列のデフォルト値を設定する方法

私は時代遅れかもしれませんが、私が守る1つの原則は、可能な限りnullを回避することです。

しかし、私が見つけたのは、ユーザーが保存したいオブジェクトのプロパティを入力する強い型のビューの場合、一部のフィールドが入力されていない場合、それらはnullとして割り当てられるということです。

その後、変更を保存しようとすると、検証は失敗します。

したがって、各プロパティを空の文字列に設定するのではなく、フォームの各TextBoxをデフォルトでnullではなく空の文字列に自動的に設定するにはどうすればよいですか?

27
arame3333

モデルのstring-propertiesに次の属性を設定できます。

[DisplayFormat(ConvertEmptyStringToNull=false)]

したがって、誰かが空のテキストフィールドを含むフォームを投稿すると、これらはnullではなく空の文字列になります...

55
Yngve B-Nilsen

正直なところ、あなたのコーディング方法は時代遅れで欠陥があると思います。あなたはすべての可能性を扱うべきです、それは難しいことではありません。それがまさにstring.IsNullOrEmpty(value);の目的です。

検証ロジックは次のようなものだと思います。

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

したがって、null値は処理されません。 nullもチェックするように、そのチェックを置き換える必要があります。

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

string.IsNullOrEmpty(value1); // true
string.IsNullOrEmpty(value2); // true
2
djdd87

受け入れられた回答で説明されているように、各モデルプロパティで属性を使用する別の解決策は、カスタムモデルバインダーを使用することです。 JSONオブジェクトをMVCコントローラーに渡すときにstring.emptyがnullに変換される を参照してください。

1
Anders

空の文字列を必要とする古いサービスを処理しているときに、この問題に遭遇しました。拡張メソッドを作成しました:

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

したがって、nullの文字列が空になるようにしたい場合にこれを使用できます

yourString1.GetValueOrDefault();
yourString2.GetValueOrDefault();
1
user3645143