如何将新记录发布到表并将该 ID 传递到另一个页面以创建相关记录

问题描述 投票:0回答:1

我正在尝试在我的剃须刀应用程序的添加客户端(创建)页面上添加新客户端。用户填写该页面并单击“添加客户端”将数据提交到 Client.db 后,我希望我的应用程序导航到我的 attendance.db 的“添加考勤(创建)”页面。考勤创建页面有一个下拉列表,用于选择客户 ID(这样该页面也可以独立于创建客户页面访问)。

我希望发生的是,当“创建出勤”页面打开时(当通过“添加客户”页面的“提交”访问时(否则不应选择任何内容),新创建的客户 ID 将默认显示在下拉列表中。目前,我的“创建客户端”页面将创建客户端记录,但我没有正确设置某些内容以使下拉列表默认为该客户端 ID。有人可以帮忙吗?我已在 MS 文档中阅读了有关 asp-route-value 的内容,如下所示以及 ViewData 信息,但还没有完全理解它。所以,不确定是否是这样或者我是否需要设置下拉列表的默认值?

以下是我迄今为止所拥有的适用代码的摘要:

My Create.cshtml,用于添加客户端并导航到“创建考勤”页面:

        <div>
            <button type="submit" asp-route-clientid="@ViewData["clientid1"]" class="btn btn-primary" style="width:150px;">Add Client -> Go To Attendance</button>
            <a asp-page="Index" class="btn btn-secondary" style="width: 150px;">Back to Client List</a>
        </div>

我的“创建客户端”页面的 Create.cshtml.cs

    public async Task<IActionResult> OnPost()
    {
        if (ModelState.IsValid)
        {
            _db.Client.Add(Client);
            await _db.Client.AddAsync(Client);
            await _db.SaveChangesAsync();
            TempData["success"] = "Client added successfully.";
            ViewData["clientid1"] = Client.Id;
            return RedirectToPage("/Attendances/Create");
        }
        return Page();
    }

创建考勤记录页面的客户下拉列表:

                <td style="width: 25%">
                    <div class="mb-3">
                        <label asp-for="Attendance.ClientId"></label>
                        <select asp-for="Attendance.ClientId" id="Select1" name="clientid" class="form-select" asp-items="@(new SelectList(Model.DisplayClientData.OrderBy(x => x.ClientDisplayName),"Id", "ClientDisplayName"))"><option value="" selected disabled>---Select Client Id---</option></select>
                    </div>
                </td>

我的 Create.cshtml.cs 用于创建考勤页面:

[BindProperties]

public class CreateModel : PageModel
{
    private readonly ApplicationDbContext _db;
    public Attendance Attendance { get; set; }
    public Client Client { get; set; }
    public CreateModel(ApplicationDbContext db)
    {
        _db = db;
    }

    public IEnumerable<Panel> DisplayPanelData { get; set; }
    public IEnumerable<Client> DisplayClientData { get; set; }
    public IEnumerable<Status> DisplayStatusData { get; set; }

    public async Task OnGet(int clientid)
    {
        var clientid1 = clientid;

        await _db.Panel.Select(a => a.PanelName).ToListAsync();
        DisplayPanelData = await _db.Panel.ToListAsync();
        await _db.Client.Select(a => a.Id).ToListAsync();
        DisplayClientData = await _db.Client.ToListAsync();
        await _db.Status.Select(a => a.StatusDesc).ToListAsync();
        DisplayStatusData = await _db.Status.ToListAsync();
    }

    public async Task<IActionResult> OnPost()
    {
        if (ModelState.IsValid)
        {
            _db.Attendance.Add(Attendance);
            await _db.Attendance.AddAsync(Attendance);
            await _db.SaveChangesAsync();
            TempData["success"] = "Client Attendance added successfully.";
            return RedirectToPage("/Clients/Edit");
            //return RedirectToPage("/Clients/Edit");
        }
        return Page();
    }
}
asp.net-core routes dropdown razor-pages viewdata
1个回答
0
投票

您可以遵循的简单工作演示:

客户端/创建.cshtml

@page
@model WebApplication1.Pages.Client.CreateModel

<form method="post">
    <button type="submit" class="btn btn-primary" style="width:150px;">Add Client</button>
</form>

客户端/Create.cshtml.cs

public class CreateModel : PageModel
{
    public IActionResult OnPost()
    {
        ViewData["clientid1"] = 1;
        return RedirectToPage("/Attendances/Create", new { clientid = ViewData["clientid1"] });
    }
}

出勤/Create.cshtml

@page
@model WebApplication1.Pages.Attendances.CreateModel

<select asp-for="Attendance.ClientId" id="Select1" name="clientid" class="form-select">
    <option value="" selected disabled>---Select Client Id---</option>
    <option value="1">client1</option>
    <option value="2">client2</option>
    <option value="3">client3</option>
</select>

出勤/Create.cshtml.cs

public class CreateModel : PageModel
{
    public Attendance Attendance { get; set; } = new Attendance();

    public void OnGet(int clientid)
    {
        Attendance.ClientId=clientid;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.