Why do I get null instead of empty string when receiving POST request in from Razor View?

前端 未结 3 1361
生来不讨喜
生来不讨喜 2020-12-02 11:20

I used to receive empty string when there was no value:

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


        
相关标签:
3条回答
  • 2020-12-02 11:27

    I am trying this in Create and Edit (my object is called 'entity'):-

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

    Which calls this:-

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

    It will be useful if you use Database First and your Model attributes get wiped out each time, or other solutions fail.

    0 讨论(0)
  • 2020-12-02 11:45

    The default model binding will create a new SomeModel for you. The default value for the string type is null since it's a reference type, so it's being set to null.

    Is this a use case for the string.IsNullOrEmpty() method?

    0 讨论(0)
  • 2020-12-02 11:51

    You can use the DisplayFormat attribute on the property of your model class:

    [DisplayFormat(ConvertEmptyStringToNull = false)]
    
    0 讨论(0)
提交回复
热议问题