You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor应用中新增客户后传递ID至考勤页面设为默认值

解决方案:Razor页面添加客户后跳转考勤页默认选中新客户ID

问题核心

当前代码存在两个关键问题:

  • 添加客户后重定向时未正确传递新客户ID到考勤页面
  • 考勤页面未将接收的客户ID绑定到Attendance.ClientId,导致下拉框无法自动匹配选中

步骤1:修复添加客户页面的跳转逻辑

修改添加客户页面的OnPost方法,通过路由参数传递新创建的客户ID(重定向后ViewData会失效,不能用它传递数据):

public async Task<IActionResult> OnPost()
{
    if (ModelState.IsValid)
    {
        // 移除重复的Add调用,保留AddAsync即可
        await _db.Client.AddAsync(Client);
        await _db.SaveChangesAsync();
        TempData["success"] = "Client added successfully.";
        
        // 重定向到考勤创建页并携带客户ID参数
        return RedirectToPage("/Attendances/Create", new { clientid = Client.Id });
    }
    return Page();
}

同时修改页面按钮,移除无效的asp-route-clientid(submit按钮的跳转逻辑由后端OnPost控制,前端路由参数会被覆盖):

<div>
    <button type="submit" 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>

步骤2:修改考勤页面的参数接收与绑定

调整考勤页面的OnGet方法,兼容独立访问场景,并将接收的客户ID绑定到Attendance.ClientId:

public async Task OnGet(int? clientid)
{
    // 初始化Attendance对象,避免空引用
    Attendance = new Attendance();
    
    // 如果传递了客户ID,赋值给绑定属性
    if (clientid.HasValue)
    {
        Attendance.ClientId = clientid.Value;
    }

    // 简化数据查询,移除无用的Select语句
    DisplayPanelData = await _db.Panel.ToListAsync();
    DisplayClientData = await _db.Client.OrderBy(x => x.ClientDisplayName).ToListAsync();
    DisplayStatusData = await _db.Status.ToListAsync();
}

步骤3:优化考勤页面的下拉框代码

移除手动添加的默认选项(asp-for会自动处理无值时的空状态),并修正冗余的name属性(asp-for会自动生成正确的name):

<td style="width: 25%">
    <div class="mb-3">
        <label asp-for="Attendance.ClientId"></label>
        <select asp-for="Attendance.ClientId" id="Select1" class="form-select" 
                asp-items="@(new SelectList(Model.DisplayClientData, "Id", "ClientDisplayName"))">
        </select>
    </div>
</td>

逻辑说明

  • Razor的asp-for与asp-items会自动匹配:当Attendance.ClientId有值时,下拉框会自动选中对应Id的选项
  • 用RedirectToPage传递路由参数,确保跨页面数据传递有效
  • 可选参数int? clientid保证考勤页面可以独立访问,不会因缺少参数报错

内容的提问来源于stack exchange,提问作者MelB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:30:19