将更改保存到数据库时如何避免保存表单对象的属性值

时间:2019-06-14 22:20:23

标签: asp.net-core razor-pages

在一个粗糙的asp.net core 2.2 Web应用程序中,我需要避免将表单对象的属性保存到db。我该怎么办?

我尝试在ListBin属性上使用[Editable(false)]数据注释,以防止将属性值保存到db。

[Table("supply_lists")]
public partial class SupplyLists
{
    [Column("id")]
    public int Id { get; set; }
    [Column("category_id")]
    public int CategoryId { get; set; }
    [Required]
    [Column("coursecode")]
    [StringLength(200)]
    public string Coursecode { get; set; }
    [Required]
    [Column("title")]
    [StringLength(200)]
    public string Title { get; set; }
    [Required]
    [Column("filename")]
    [StringLength(200)]
    public string Filename { get; set; }
    [Column("isactive")]
    public bool Isactive { get; set; }
    [Column("date", TypeName = "smalldatetime")]
    public DateTime Date { get; set; }

    [Column("list_bin")]
    public byte[] ListBin { get; set; }

    [ForeignKey("CategoryId")]
    [InverseProperty("SupplyLists")]
    public virtual SupplyListCategory Category { get; set; }
}


[ModelMetadataType(typeof(MetaDataTypeModel))]
public partial class SupplyLists
{

}
public class MetaDataTypeModel
{
    [Editable(false)]
    public byte[] ListBin { get; set; }

    [Display(Name = "Is Active")]
    public bool Isactive { get; set; }

    [Display(Name ="Course Code")]
    public string Coursecode { get; set; }

    [Display(Name = "Category")]
    public int CategoryId { get; set; }

    [DataType(DataType.Date)]
    public DateTime Date { get; set; }
}

public class EditModel : PageModel
{
    private readonly SupplyListCore22.Models.SupplyListsContext _context;
    private readonly IHostingEnvironment _env;

    public EditModel(SupplyListCore22.Models.SupplyListsContext context, IHostingEnvironment env)
    {
        _context = context;
        _env = env;
    }

    [BindProperty]
    public SupplyLists SupplyLists { get; set; }
    [BindProperty]
    public FileUpload FileUpload { get; set; }

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

        SupplyLists = await _context.SupplyLists
            .Include(s => s.Category).FirstOrDefaultAsync(m => m.Id == id);

        if (SupplyLists == null)
        {
            return NotFound();
        }
       ViewData["CategoryId"] = new SelectList(_context.SupplyListCategory, "Id", "Category");
        return Page();
    }

    public async Task<IActionResult> OnPostAsync()
    {
        //if (!ModelState.IsValid)
        //{
        //    return Page();
        //}

        _context.Attach(SupplyLists).State = EntityState.Modified;
        await _context.SaveChangesAsync();

        if (FileUpload.UploadSupplyList != null)
        {
            var fileUploadData = await utilities.utilities.ProcessFormFile(FileUpload.UploadSupplyList, ModelState);
            if (ModelState.ErrorCount > 0)
            {
                ViewData["CategoryId"] = new SelectList(_context.SupplyListCategory, "Id", "Category");
                return Page();
            }
            var sl = _context.SupplyLists.Find(SupplyLists.Id);
            sl.ListBin = fileUploadData;

            await _context.SaveChangesAsync();

        }

        return RedirectToPage("./Index");
    }

它在db中将ListBin设置为null,这不是我保存更改时想要的(我想在db中保留ListBin的旧值)。

0 个答案:

没有答案