如何检查放置请求中的日期时间值是否为空

时间:2018-12-28 17:31:14

标签: c# asp.net-mvc validation httprequest put

在我的控制器中,我试图检查是否在放置请求中传递了datetime值,但是当我不发送该datetime字段的值时,它将数据库中的值重置为01/01 / 0001 /这是我的控制器中的代码,如何检查它是否为空。(一点点)(检查user.Age!)

[HttpPut("User/Edit/{userid}")]
    public IActionResult Update(string token, int userid, [FromBody]User user)
    {


        bool RoleId = JWTValidator.RoleIDTokenValidation(token);
        var edit = _context.users.Find(userid);
        if (RoleId)
        {
            if (user.Name != null)
            {
                edit.Name = user.Name;
            }
            else
            {
                edit.Name = edit.Name;
            }
            if (user.LastName != null)
            {
                edit.LastName = user.LastName;
            }
            else
            {
                edit.LastName = edit.LastName;
            }
            if (user.Age != null)
            {
                edit.Age = user.Age;
            }
            else
            {
                edit.Age = edit.Age;
            }

因此,如果该值为null,它将不会更新,但是我想如果您不输入任何内容,它将看到它为01/01/0001,所以我尝试像这样与之比较

if(user.Age == "01/01/0001")

但我无法将类型datetime与字符串进行比较。而且我正在使用像这样的验证

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

我的年龄模型是

[Display(Name = "Your Birthday")]
    [DataType(DataType.Date, ErrorMessage = "Not a correct date format, MM/DD/YYYY please.")]
    public DateTime Age { get; set; }

但是如果我发送带有内容“ Age”:“ test”的放置请求,它只会给我500内部错误而不是给我错误消息,这是我处理错了吗?

希望任何人都可以帮助我。

4 个答案:

答案 0 :(得分:1)

好吧,如果您正在寻找替代它的if(user.Age ==“ 01/01/0001”)

这里有一个简单的示例:如果日期相同,则返回0

DateTime dt = DateTime.ParseExact("01/01/0001 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); //Use your default date string and your format type
DateTime dt2 = DateTime.Now;//Use Your Specific Date
var dtComp = DateTime.Compare(dt, dt2);

答案 1 :(得分:0)

听起来像这里的问题是您需要将struct与默认值(不是null)进行比较。为此,您只需使用default关键字即可获取该类型的默认值。请注意,您可以使用类和结构来做到这一点:

if (user.Age != default(DateTime))
{
    edit.Age = user.Age;
}

答案 2 :(得分:0)

您还可以将年龄声明为可为空,即

['7','3']

然后,您可以轻松地检查是否为null,也可以简单地设置edit。像这样的年龄(如果您需要默认值):

DateTime? user.Age  = new DateTime();

致谢。

答案 3 :(得分:0)

DateTime  myDate;
if(myDate.Date == DateTime.MinValue)
{
    //Do!
}