为什么从Razor View接收POST请求时,我会得到null而不是空string?

当没有值的时候,我曾经收到空string:

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

所以我必须使用?? "" ?? ""运营商。

为什么发生这种情况?

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

 [DisplayFormat(ConvertEmptyStringToNull = false)] 

默认的模型绑定会为您创build一个新的SomeModel。 stringtypes的默认值为空,因为它是一个引用types,所以它被设置为null。

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

我正在尝试创build和编辑(我的对象被称为“实体”):

  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属性被清除,或者其他解决scheme失败,那么这将非常有用。