Почему я получаю 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 61

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, "");
            }
        }
    }

это будет полезно, если вы используете базу данных в первую очередь и ваши атрибуты модели стираются каждый раз, или другие решения терпят неудачу.