81

当没有值时,我曾经收到空字符串:

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

所以我必须使用?? ""运算符。

为什么会这样?

4

3 回答 3

169

您可以DisplayFormat在模型类的属性上使用该属性:

[DisplayFormat(ConvertEmptyStringToNull = false)]
于 2012-02-17T05:09:45.253 回答
9

默认模型绑定将为您创建一个新的 SomeModel。字符串类型的默认值为 null,因为它是引用类型,所以它被设置为 null。

这是 string.IsNullOrEmpty() 方法的用例吗?

于 2010-09-05T18:05:48.157 回答
2

我正在创建和编辑中尝试此操作(我的对象称为“实体”):-

        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 并且您的 Model 属性每次都被清除,或者其他解决方案失败,这将很有用。

于 2015-11-06T21:03:01.733 回答