Ich habe eine leere Zeichenfolge erhalten, wenn es keinen Wert gab:
[HttpPost]
public ActionResult Add(string text)
{
// text is "" when there's no value provided by user
}
Aber jetzt komme ich an einem Modell vorbei
[HttpPost]
public ActionResult Add(SomeModel Model)
{
// model.Text is null when there's no value provided by user
}
Also muss ich den ?? ""
Operator benutzen .
Warum passiert das?
Antworten:
Sie können das
DisplayFormat
Attribut für die Eigenschaft Ihrer Modellklasse verwenden:[DisplayFormat(ConvertEmptyStringToNull = false)]
quelle
public ActionResult Quotations(string projectName, string brandName, string modelName, string clientName) { var model = _dataAccess.Quotations_Select(projectName, brandName, modelName, clientName); return View(model); }
Aufrufen einer gespeicherten Prozedur und Bereitstellen von Werten, sodass das Attribut für mich nicht funktioniert. Was soll ich machen?AddMvc(o => ModelMetadataDetailsProviders.Add(new YourProvider()))
. Dort inGetDisplayMetadata
können Sie alles tun, was Attribute tun. Für diese Frage wird es seincontext.DisplayMetadata.ConvertEmptyStringToNull = false;
Die Standardmodellbindung erstellt ein neues SomeModel für Sie. Der Standardwert für den Zeichenfolgentyp ist null, da es sich um einen Referenztyp handelt. Daher wird er auf null gesetzt.
Ist dies ein Anwendungsfall für die Methode string.IsNullOrEmpty ()?
quelle
Ich versuche dies in Erstellen und Bearbeiten (mein Objekt heißt 'Entität'): -
if (ModelState.IsValid) { RemoveStringNull(entity); db.Entity.Add(entity); db.SaveChanges(); return RedirectToAction("Index"); } return View(entity); }
Was das nennt: -
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, ""); } } }
Dies ist hilfreich, wenn Sie Database First verwenden und Ihre Modellattribute jedes Mal gelöscht werden oder andere Lösungen fehlschlagen.
quelle