【问题标题】:How to Change Date from new to old date when creating new record in ASP.NET CORE MVC在 ASP.NET CORE MVC 中创建新记录时如何将日期从新日期更改为旧日期
【发布时间】:2021-05-19 15:20:55
【问题描述】:

例如,我在分配的资产中创建了一条记录,其中包含资产代码 (lap001)、员工姓名 (hana) 和日期 (08/10/21)。

然后我创建了另一条具有相同资产代码 (lap001) 不同员工姓名 (lana) 和日期 (09/10/21) 的记录。换句话说,我已将此资产分配给不同的员工。

在该特定资产代码 (lap001) 屏幕的资产主数据详细信息中,如何显示该特定资产从上一个日期 (08/10/21) 到新日期 (09/10/21) 分配给该员工。

目前,AssigningAssetModel 中的日期现在已分配给 AssignedToDateNew,当我创建新记录时如何将新日期移至旧日期,以及如何防止用户将前一个日期 (08/10/21) 与新日期之间的日期(09/10/21)

AssigningAssetModel 类:

public class AssigningAssetModel
{
    [key]
    public int ID { get; set; }

    [Required(ErrorMessage = "Enter Employee Name")]
    public string EmployeeName {get; set; }

    [Required(ErrorMessage = "Enter AssetCode")]
    public string AssetCode { get; set; }

    [Required(ErrorMessage = "Enter Date")]
    public string Date{ get; set; }
}

AssetMasterModel 类:

public class AssetMasterModel
{
    [Key]
    public int ID { get ;set; }

    [Required(ErrorMessage = "Enter AssetCode")] 
    public string AssetCode { get; set; }

    [Required(ErrorMessage = "Enter Employee Name")]
    public string EmployeeName{ get; set; }

    public string AssignedToDateOld { get; set; }

    public string AssignedToDateNew { get; set; }
}

AssigningAsset控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(int id, [Bind("ID,EmployeeName,AssetCode,Date,")] AssigningAssetModel assigningAssetModel)
{            
    if (id != assigningAssetModel.ID) 
        return NotFound();

    if (!ModelState.IsValid) 
        return View(assigningAssetModel);

    try
    {
        var masterExist = await _context.Set<AssetMasterModel>()
                                        .FirstOrDefaultAsync( i => i.AssetCode == assigningAssetModel.AssetCode);

        if (masterExist == null) 
            return NotFound();

        if (masterExist.EmployeeName != assigningAssetModel.EmployeeName)
        {
            masterExist.EmployeeName = assigningAssetModel.EmployeeName;
            masterExist.AssignedToDateNew = assigningAssetModel.Date;
                                
            _context.Entry(masterExist).State=EntityState.Modified;
        }

        _context.Add(assigningAssetModel);
        await _context.SaveChangesAsync();
        _context.Update(assigningAssetModel);
        await _context.SaveChangesAsync();
    }
    catch (Exception ex)
    {
        return BadRequest(ex.Message);
    }

    return RedirectToAction(nameof(Index));
}

AssetMaster控制者:

    public async Task<IActionResult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var assetMasterModel = await _context.AssetMaster
            .FirstOrDefaultAsync(m => m.ID == id);
        if (assetMasterModel == null)
        {
            return NotFound();
        }

        return View(assetMasterModel);
    }

所以基本上在Assigning Asset Index 中,此资产代码 (laptop0001015) 首先在 22/05/2021 分配给 Tom,然后它已在 24/05/2021 分配给 Mouffaq,现在在资产管理器中如何显示此资产代码此案例 (Laptop0001015) 从 22/05/2021 到 24/05/2021 分配给 Tom

【问题讨论】:

  • 很抱歉,很难理解您需要什么。您能否发布一个详细示例,在添加新记录之前是什么值,之后您希望看到什么值?
  • 很难理解你在问什么,但有几个严重的问题。对于初学者来说,DateTime 是一种二进制类型,它没有格式。没有充分的理由使用string 来存储日期。其次,两位数的年份重新引入了 2000 年,仅在劳埃德和苏格兰皇家银行等主要银行下线后一年,20 被视为1920。绝对没有理由在 2021 年使用两位数年份。
  • 使用字符串而不是 DateTime 会使查询变得非常困难,如果不是不可能的话。对于初学者来说,甚至无法猜测字符串格式是什么。除非字符串是YY/MM/DD 格式,否则只能搜索完全匹配,因为数据库将使用字母(字典)排序。例如,您将无法搜索 2021 年的每个日期,或特定时期内的日期
  • 另一个同样严重的错误是多次使用await _context.SaveChangesAsync();。不要那样做。当您调用SaveChanges 时,DbContext 会缓存所有更改并将它们保存在单个事务中。如果出现问题,所有更改都会自动回滚。在事务完成之前,其他连接不会看到更改。另一方面,您的代码逐个对象存储更改,这意味着其他人可以看到部分更改。如果出现问题,只会回滚一半的更改,导致数据不一致
  • @PanagiotisKanavos 我不放 DateTime 的唯一原因是因为日期是在创建记录时自动生成的,所以它不是由用户手动输入的

标签: c# .net-core asp.net-core-mvc


【解决方案1】:

据我了解,您需要做的是在创建新记录之前保留现有资产日期,然后将其分配给新记录。

prevDate = employee.getCurrentAsset().date
newAsset = new Asset()
newAsset.date = prevDate ;
employee.setCurrentAsset(newAsset) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多