ti-enxame.com

Por que obtenho nulo em vez de string vazia ao receber uma solicitação POST no Razor View?

Eu costumava receber uma string vazia quando não havia valor:

[HttpPost]
public ActionResult Add(string text)
{
    // text is "" when there's no value provided by user
}

Mas agora estou passando um modelo

[HttpPost]
public ActionResult Add(SomeModel Model)
{
    // model.Text is null when there's no value provided by user
}

Então eu tenho que usar o ?? "" operador.

Por que isso está acontecendo?

69
Alex

Você pode usar o atributo DisplayFormat na propriedade da sua classe de modelo:

[DisplayFormat(ConvertEmptyStringToNull = false)]
146
Michael Jubb

A ligação do modelo padrão criará um novo SomeModel para você. O valor padrão para o tipo de sequência é nulo, pois é um tipo de referência, portanto está sendo definido como nulo.

Esse é um caso de uso para o método string.IsNullOrEmpty ()?

8
hackerhasid

Estou tentando isso em Criar e Editar (meu objeto é chamado 'entidade'): -

        if (ModelState.IsValid)
        {
            RemoveStringNull(entity);
            db.Entity.Add(entity);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(entity);
    }

O que chama isso: -

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

Será útil se você usar o Database First e seus atributos de Modelo forem apagados toda vez ou outras soluções falharem.

2
user2284063