我正在尝试在我的剃须刀应用程序的添加客户端(创建)页面上添加新客户端。用户填写该页面并单击“添加客户端”将数据提交到 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();
}
}
您可以遵循的简单工作演示:
客户端/创建.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;
}
}