Почему я получаю null вместо пустой строки при получении запроса POST из Razor View?
раньше я получал пустую строку, когда не было значения:
[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
}
Так что я должен использовать ?? ""
оператора.
почему это происходит?
3 ответа:
можно использовать
DisplayFormat
атрибут свойства класса модели:[DisplayFormat(ConvertEmptyStringToNull = false)]
привязка модели по умолчанию создаст для вас новую модель SomeModel. Значение по умолчанию для строкового типа-null, так как это ссылочный тип, поэтому он устанавливается в null.
Это вариант использования для строки.IsNullOrEmpty() метод?
Я пытаюсь сделать это в Create and Edit (мой объект называется 'entity'): -
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, ""); } } }
это будет полезно, если вы используете базу данных в первую очередь и ваши атрибуты модели стираются каждый раз, или другие решения терпят неудачу.