【问题标题】:Updating one-to-many relationships with Razor Pages使用 Razor 页面更新一对多关系
【发布时间】:2018-09-08 19:36:42
【问题描述】:

我不知道如何使用 Razor Pages asp.net core 2.0 更新相关数据。

在下面的示例中,我可以更新“项目”数据,但在 OnPostAsync() 上看不到相关的“操作”数据(一个项目 => 多个操作)。

EditModel : PageModel

    [BindProperty]
    public Project Project { get; set; }


    public async Task<IActionResult> OnGetAsync(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }
        //THIS PART WORKS, I CAN SEE ACTIONS WITH THE PROJECT
        Project = await _context.Project.Include(a=>a.Action).SingleOrDefaultAsync(m => m.Id == id);

        if (Project == null)
        {
            return NotFound();
        }
        return Page();
    }

    public async Task<IActionResult> OnPostAsync(int? id)
    {
        //MODEL IS NOT RETURNING ACTIONS (One project many actions)
        if (!ModelState.IsValid)
        {
            return Page();
        }

        //How do I update actions?

        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!ProjectExists(Project.Id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return RedirectToPage("./Index");
    }

OnModelCreating:

    modelBuilder.Entity<Action>(entity =>
        {

            entity.HasOne(d => d.Project)
                .WithMany(p => p.Action)
                .HasForeignKey(d => d.ProjectId)
                .HasConstraintName("FK_Action_Project");
        });

【问题讨论】:

    标签: asp.net-core-2.0 razor-pages


    【解决方案1】:

    我想你还没有理解 BindProperty 是如何工作的。通过对属性使用 BindProperty,您可以从框架中询问该属性的值在视图中是否可用,并且如果您有一个包含该值的输入,它将在您提交输入内容时返回到该属性。

    这意味着即使对于项目对象,如果您没有将承载模式值的输入,您也不会获得值。

    你有两个选择。第一个选项是为列表中的所有操作项输入输入,这不是一个好主意,第二个选项是在提交表单后再次从数据库中查询列表。

    【讨论】:

    • 我在 OnGetAsync 和 OnPostAsync 这两个调用中都获得了值。但是,在 OnGetAsync 我可以看到 Project 和 Action 值,在 OnPostAsync 我只能看到(并且可以更新)Project。
    猜你喜欢
    • 2021-01-29
    • 2020-11-20
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多