无法将类型为“System.DateTime”的对象强制转换为类型"System.String“,ASP.NET核心

zqdjd7g9  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(300)

我只是一个初学者在ASP.NET核心。我在customers表(SQL Server)中有一个日期类型的列。我想在程序中更新客户状态,但当尝试执行更新方法时,我得到错误:
无法将类型为“System.DateTime”的对象强制转换为类型"System.String“

public async Task<ActionResult<Customers>> UpdateCustomerStatus(int customer_id, char customer_status)
{
    var dbcustomers = await _context.client_customers.FindAsync(customer_id);

    if (dbcustomers == null)
        return NotFound("Customer Not Found");
    if(customer_status == 'Y' || customer_status == 'N')
    {
        dbcustomers.customer_status = customer_status;
    }
    else
    {
        return BadRequest("Invalid Status");
    }
    await _context.SaveChangesAsync();
    return Ok(await _context.clients.ToListAsync());
}

我尝试在客户模型类中更改数据类型,但没有成功,并且我得到了显式Map属性的错误。

public DateOnly join_date { get; set; }

我是否在表中更改了某些内容或在程序中转换了数据类型?

4xy9mtcn

4xy9mtcn1#

这是official document的样本和我的测试结果。
就像我们在评论中看到的一样,错误指向了一个可能与您的模型或DTO相关的问题,该模型或DTO设置了一个字符串来存储日期时间。然后当我们使用ef-core将模型保存到表中时,我们得到了这个异常,我们需要修改模型。

public async Task<IActionResult> Create([Bind("Id,Title,ReleaseDate,Genre,Price")] Movie movie)
{
    if (ModelState.IsValid)
    {
        _context.Add(movie);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    return View(movie);
}

 public class Movie
 {
     public int Id { get; set; }
     public string? Title { get; set; }
     [DataType(DataType.Date)]
     public DateTime ReleaseDate { get; set; }
     public string? Genre { get; set; }
     public decimal Price { get; set; }
 }
 
<form asp-action="Create">
    <div class="form-group">
        <label asp-for="ReleaseDate" class="control-label"></label>
        <input asp-for="ReleaseDate" class="form-control" />
        <span asp-validation-for="ReleaseDate" class="text-danger"></span>
    </div>
    <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
    </div>
</form>

测试结果。

相关问题