【问题标题】:How to check if a float value is empty in a POST request如何检查 POST 请求中的浮点值是否为空
【发布时间】:2018-12-25 03:46:48
【问题描述】:

我想知道当我发送浮点值时我应该如何检查 POST 请求是否发送数据,我尝试使用 if 语句对我在 post 请求中给出的所有值执行此操作,但我不能使用浮点值上的 if 语句,因为它不能为空。这是我的发帖请求。对于大多数人来说,它可能看起来真的很难看,但我不熟悉 ASP.NET MVC

[HttpPut("Product/Edit/{productid}")]
    public IActionResult ProductEdit(string token, int productid, [FromBody]Product p)
    {
        bool RoleId = JWTValidator.RoleIDTokenValidation(token);
        var edit = _context.products.Find(productid);
        if (RoleId)
        {
            if (p.Name != null)
            {
                edit.Name = p.Name;
            }
            else
            {
                edit.Name = edit.Name;
            }
            if (p.Description != null)
            {
                edit.Description = p.Description;
            }
            else
            {
                edit.Description = edit.Description;
            }
            edit.Price = p.Price;
            if (p.FirstImg != null)
            {
                edit.FirstImg = p.FirstImg;
            }
            else
            {
                edit.FirstImg = edit.FirstImg;
            }
            edit.Stock = p.Stock;

            if (ModelState.IsValid)
            {
                _context.products.Update(edit);
                _context.SaveChanges();
            }
            else
            {
                return BadRequest(ModelState);
            }

            return Ok("Product updated");
        }

        return Unauthorized();

    }

价格是浮动的,库存是 int 的,所以我尝试用 if 语句来做这件事,就像我对其他人做的那样,但由于上述原因,它不能做到。我试过这个(代码在这个文本下面被剪断)但是当我这样做并发送一个 POST 请求时,我的数据库将更新为价格和库存的空值。

if(p.Price.ToString() != null)
            {
            edit.Price = p.Price;
            } else {
                edit.Price = edit.Price;
            }

所有这些的 if 语句检查通过 post 请求发送的值是否为空,否则将保留数据库中的原始值。

任何帮助或建议将不胜感激,我很高兴了解我是一名学生,所以任何评论都可以。

【问题讨论】:

  • 您真的需要else 零件代码吗?属性值已经存在。还可以考虑使用为您进行验证的 ModelValidation。
  • @Shyju 是的,我需要 else,否则如果我不向该属性传递值,它将发送一个空字符串,例如,如果我发出一个我只想更新描述的发布请求我也不想更新库存和价格。并且 if 语句使得当我没有在 POST 请求中传递其他值时情况并非如此。但我实际上还没有测试过,所以我会在没有 else 的情况下尝试它,但这仍然不能解决我的问题。我也已经在使用验证了。

标签: c# asp.net-mvc post http-post


【解决方案1】:

正如Taskin所说,价格是浮动类型,所以默认为0。 因此,请尝试如下设置您的价格。

edit.Price = p.Price != edit.Price ? p.Price : edit.Price;

【讨论】:

    【解决方案2】:

    你可以这样做。

      if (p.Price.Equals(null))
            {
                edit.Price = edit.Price;
            }
            else
            {
                edit.Price = p.Price;
            }
    

    【讨论】:

      【解决方案3】:

      正如你提到的价格是浮动类型,所以默认情况下它将是 0.0f(如果你第一次没有保存任何值)所以只需与价格进行比较 > 0

      改变你的代码像

      if(p.Price>0)
              {
              edit.Price = p.Price;
              } else {
                  edit.Price = edit.Price;
              }
      

      【讨论】:

      • 打折和负价怎么办?
      • @JeremyThompson 我认为价格输入不会是负数。如果有任何折扣字段(尽管没有任何迹象),则应从服务器端进行调整。在现实生活中,您不会将价格金额保存为负值
      • 我们没有为这个项目提供折扣,但如果我们这样做了,我们会采取不同的做法,然后在控制器中确保折扣价格,但感谢您的建议。
      • @TaskinKhaleque 如果您认为不使用负美元和单位价格,您就没有在财务部门工作过。事实上,许多会计系统都依赖负美元价值。例如资产负债表。
      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2018-05-30
      • 1970-01-01
      • 2014-05-16
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多