値がなかったときに空の文字列を受け取っていました。
[HttpPost]
public ActionResult Add(string text)
{
// text is "" when there's no value provided by user
}
しかし、今私はモデルを渡している
[HttpPost]
public ActionResult Add(SomeModel Model)
{
// model.Text is null when there's no value provided by user
}
したがって、?? ""
演算子を使用する必要があります。
なんでこんなことが起こっているの?
モデルクラスのプロパティで DisplayFormat
属性を使用できます。
[DisplayFormat(ConvertEmptyStringToNull = false)]
デフォルトのモデルバインディングは、新しいSomeModelを作成します。文字列型のデフォルト値は参照型であるためnullであり、nullに設定されています。
これはstring.IsNullOrEmpty()メソッドのユースケースですか?
私は作成と編集でこれを試しています(私のオブジェクトは「エンティティ」と呼ばれます):
if (ModelState.IsValid)
{
RemoveStringNull(entity);
db.Entity.Add(entity);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(entity);
}
これはこれを呼び出します:-
private void RemoveStringNull(object entity)
{
Type type = entity.GetType();
FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Instance | BindingFlags.GetField | BindingFlags.Public | BindingFlags.NonPublic);
for (int j = 0; j < fieldInfos.Length; j++)
{
FieldInfo propertyInfo = fieldInfos[j];
if (propertyInfo.FieldType.Name == "String" )
{
object obj = propertyInfo.GetValue(entity);
if(obj==null)
propertyInfo.SetValue(entity, "");
}
}
}
Database Firstを使用し、モデル属性が毎回消去されるか、他のソリューションが失敗する場合に役立ちます。