Подтвердить что ты не робот

Почему я получаю null вместо пустой строки при получении запроса POST из Razor View?

Я использовал для получения пустой строки, когда не было значения:

[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
}

Поэтому я должен использовать оператор ?? "".

Почему это происходит?

4b9b3361

Ответ 1

Вы можете использовать атрибут DisplayFormat свойства вашего класса модели:

[DisplayFormat(ConvertEmptyStringToNull = false)]

Ответ 2

Связывание модели по умолчанию создаст для вас новую SomeModel. Значение по умолчанию для типа строки является нулевым, так как оно является ссылочным типом, поэтому оно имеет значение null.

Является ли это прецедентом для метода string.IsNullOrEmpty()?

Ответ 3

Я пытаюсь это в 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, и ваши атрибуты модели будут стерты каждый раз, или другие решения не удастся.