Ответ 1
Вы можете использовать атрибут DisplayFormat
свойства вашего класса модели:
[DisplayFormat(ConvertEmptyStringToNull = false)]
Я использовал для получения пустой строки, когда не было значения:
[HttpPost]
public ActionResult Add(string text)
{
// text is "" when there no value provided by user
}
Но теперь я прохожу модель
[HttpPost]
public ActionResult Add(SomeModel Model)
{
// model.Text is null when there no value provided by user
}
Поэтому я должен использовать оператор ?? ""
.
Почему это происходит?
Вы можете использовать атрибут DisplayFormat
свойства вашего класса модели:
[DisplayFormat(ConvertEmptyStringToNull = false)]
Связывание модели по умолчанию создаст для вас новую SomeModel. Значение по умолчанию для типа строки является нулевым, так как оно является ссылочным типом, поэтому оно имеет значение null.
Является ли это прецедентом для метода string.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, "");
}
}
}
Это будет полезно, если вы используете Database First, и ваши атрибуты модели будут стерты каждый раз, или другие решения не удастся.