【发布时间】:2018-12-28 17:31:13
【问题描述】:
在我的控制器中,我试图检查是否在 put 请求中传递了日期时间值,但是当我不发送该日期时间字段的值时,它会将数据库中的值重置为 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")
但我无法将日期时间类型与字符串进行比较。而且我也在使用这样的验证
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" 的 put 请求,它只会给我一个 500 内部错误而不是给我错误消息,我处理错了吗?
希望有人能帮帮我。
【问题讨论】:
-
使用
DateTime.MinValue代替那个字符串。 -
可能有助于使 DateTime 也可以为空。
-
您不需要那些
else语句,它们将属性设置为它自己的现有值... -
您真的在使用
Age来命名日期/时间值吗?你不觉得这会让人们感到困惑吗?当有人问你的年龄时,你不会说“1999 年 12 月 26 日”。你说,“我今年 19 岁。”请将变量命名为BirthDate。这将是一个不那么令人困惑的日志。 -
是的,抱歉,我本来打算这样做,但首先想解决这个问题@JimMischel
标签: c# asp.net-mvc validation httprequest put