Pourquoi est-ce que j’obtiens une chaîne null au lieu d’une chaîne vide lors de la réception d’une requête POST depuis Razor View?

J’avais l’habitude de recevoir une chaîne vide quand il n’y avait pas de valeur:

[HttpPost] public ActionResult Add(ssortingng 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 } 

Donc je dois utiliser le ?? "" ?? "" opérateur.

Pourquoi cela arrive-t-il?

Vous pouvez utiliser l’atsortingbut DisplayFormat sur la propriété de votre classe de modèle:

 [DisplayFormat(ConvertEmptySsortingngToNull = false)] 

La liaison de modèle par défaut créera un nouveau modèle SomeModel pour vous. La valeur par défaut du type de chaîne est null car il s’agit d’un type de référence. Par conséquent, il est défini sur null.

Est-ce un cas d’utilisation pour la méthode ssortingng.IsNullOrEmpty ()?

J’essaie ceci dans Create et Edit (mon object s’appelle ‘entity’): –

  if (ModelState.IsValid) { RemoveSsortingngNull(entity); db.Entity.Add(entity); db.SaveChanges(); return RedirectToAction("Index"); } return View(entity); } 

Qui appelle cela: –

  private void RemoveSsortingngNull(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, ""); } } } 

Cela sera utile si vous utilisez Database First et que vos atsortingbuts de modèle soient effacés à chaque fois, ou si d'autres solutions échouent.