J'avais l'habitude de recevoir une chaîne vide quand il n'y avait pas de valeur:
[HttpPost]
public ActionResult Add(string text)
{
// text is "" when there's no value provided by user
}
Mais maintenant je passe un modèle
[HttpPost]
public ActionResult Add(SomeModel Model)
{
// model.Text is null when there's no value provided by user
}
Je dois donc utiliser le ?? ""
opérateur.
Pourquoi cela arrive-t-il?
Vous pouvez utiliser l'attribut DisplayFormat
sur la propriété de votre classe de modèle:
[DisplayFormat(ConvertEmptyStringToNull = false)]
La liaison de modèle par défaut créera un nouveau SomeModel pour vous. La valeur par défaut pour le type de chaîne est null car il s'agit d'un type de référence, il est donc défini sur null.
Est-ce un cas d'utilisation pour la méthode string.IsNullOrEmpty ()?
J'essaye ceci dans Create and Edit (mon objet s'appelle 'entité'): -
if (ModelState.IsValid)
{
RemoveStringNull(entity);
db.Entity.Add(entity);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(entity);
}
Qui appelle ça: -
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, "");
}
}
}
Il sera utile si vous utilisez la base de données en premier et que vos attributs de modèle sont effacés à chaque fois, ou si d'autres solutions échouent.