代码之家  ›  专栏  ›  技术社区  ›  vesperkg

如何创建包含创建元素的人员信息的列

  •  1
  • vesperkg  · 技术社区  · 7 年前

    你能帮帮我吗。如何创建列,其中包含有关谁创建了元素的信息(列CreatedBy)我使用Windows身份验证创建了asp net core 2.0 MVC Web应用程序。我成功地实现了关于谁最后修改的信息,但我无法通过CreatedBy获得它。 我的型号是

     public class TestModel
        {
            public int Id { get; set; }
            public string Description { get; set; }
            public string CreatedBy { get; set; }
            [DataType(DataType.Date)]
            public DateTime Created { get;}
            public TestModel()
            {
                Created = DateTime.Now;
            }
            public string ModifiedBy { get; set; }
            public DateTime Modified { get; set; }
        }
    

    我的创建控制器

    public async Task<IActionResult> Create([Bind("Id,Description")] TestModel testModel)
            {
                if (ModelState.IsValid)
                {
                    _context.Add(testModel);
                    testModel.CreatedBy = this.User.Identity.Name;
                   // testModel.ModifiedBy = this.User.Identity.Name;
                    testModel.Modified = DateTime.Now;
                    await _context.SaveChangesAsync();
                    return RedirectToAction(nameof(Index));
                }
                return View(testModel);
            }
    

    编辑控制器

    public async Task<IActionResult> Edit(int id, [Bind("Id,Description")] TestModel KestModel)
            {
                if (id != KestModel.Id)
                {
                    return NotFound();
                }
    
                if (ModelState.IsValid)
                {
                    try
                    {
    
                      await _context.SaveChangesAsync();
                    }
                    catch (DbUpdateConcurrencyException)
                    {
                        if (!TestModelExists(KestModel.Id))
                        {
                            return NotFound();
                        }
                        else
                        {
                            throw;
                        }
                    }
                    return RedirectToAction(nameof(Index));
                }
    
    
                return View();
            }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   programtreasures    7 年前

    根据您的评论,我理解您希望在更新请求时更新modifyby,并在创建请求时分配createdby,

    为此,您应该检查是否已分配Id,如果Id已分配,则它是更新请求,否则它是创建请求

    尝试以下代码更改

    public async Task<IActionResult> Create([Bind("Id,Description")] TestModel testModel)
    {
        if (ModelState.IsValid)
        {                   
            if(testModel.Id > 0){
                // the entity is already created and it is modify request
                _context.Entry(testModel).State = EntityState.Modified;
    
                testModel.ModifiedBy = this.User.Identity.Name;
                testModel.Modified = DateTime.Now;
            }
            else{
                // it is create request
                _context.Entry(testModel).State = EntityState.Added;            
    
                testModel.CreatedBy = this.User.Identity.Name;
                testModel.Created = DateTime.Now;
            }            
    
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(testModel);
    }