技术考试需求代码验证:多角色登录与布尔值控制子表单激活
代码合规性专业判断
需求回顾
- a.) 创建支持两种用户角色登录的Web应用
- b.) 创建包含1个仪表盘+2个录入表单的Web应用(Form A和Form B,Form B是Form A的子表单)
- c.) 允许用户在Form A中录入信息,在Form A内设置一个布尔值;若该布尔值为true,则激活Form B供用户输入,否则用户仅可提交Form A;仪表盘需展示Form A的列表。
现有代码问题分析
你的代码和需求存在明显差距,具体问题如下:
- 角色支持不完整:只处理了Admin角色,完全没实现第二种角色的访问逻辑,不符合需求a中“两种用户角色”的要求,非Admin用户连表单都看不到。
- 表单结构缺失:只有Form A的部分字段,完全没有Form B的代码,不符合需求b中“两个录入表单”的要求。
- 布尔值逻辑错误:代码里的
bolAdmin是硬编码的true,不是用户在Form A里设置的布尔值,根本实现不了“用户选了true才激活Form B”的核心逻辑,当前的分支判断和需求无关。 - 仪表盘完全缺失:没有任何展示Form A列表的代码,不符合需求b和c的要求。
- 数据绑定失效:输入框没绑定Model属性(比如
asp-for),表单提交后拿不到用户输入的数据,没法存到数据库里。
核心改进方向
- 补全角色逻辑:添加第二种角色(比如普通User)的访问规则,不同角色可以设置不同权限,比如Admin能编辑更多字段,普通User只能填基础信息;同时确保未登录用户不能访问表单。
- 完善表单结构:在Form A里加一个用户可勾选的布尔控件(比如复选框),然后写出Form B的HTML结构,用JS或者后端逻辑根据这个布尔值控制Form B显示/隐藏。
- 修复控制逻辑:把硬编码的
bolAdmin换成用户输入的布尔值,实现“用户勾选后激活Form B”的效果,提交时根据这个值判断要不要收集Form B的数据。 - 添加仪表盘:单独做一个仪表盘页面,从数据库里拉Form A的列表数据展示,支持分页、筛选这类基础功能。
- 绑定表单数据:所有输入框加上
asp-for属性绑定Model字段,确保提交后能正确获取和存储数据。
示例改进代码片段
@page @model IndexModel @using Microsoft.AspNetCore.Identity; @inject SignInManager<IdentityUser> SignInManager @{ ViewData["Title"] = "Form A"; } <div class="container mt-5"> @if (SignInManager.IsSignedIn(User)) { <div class="row justify-content-center align-items-center"> <div class="col-sm-12 col-md-8 col-lg-6"> <h1 class="mb-3">Form A</h1> <form method="post"> <!-- Form A基础字段 --> <div class="mb-3"> <label class="form-label" asp-for="FormA.FirstName"></label> <input type="text" class="form-control" asp-for="FormA.FirstName" /> <span asp-validation-for="FormA.FirstName" class="text-danger"></span> </div> <!-- 用户设置的布尔值控件 --> <div class="mb-3"> <div class="form-check"> <input class="form-check-input" type="checkbox" asp-for="FormA.IsActivateFormB" id="activateFormB"> <label class="form-check-label" for="activateFormB">激活Form B</label> </div> </div> <!-- Form B(默认隐藏,根据布尔值显示) --> <div class="mb-3" id="formBContainer" style="display: none;"> <h3 class="mb-2">Form B</h3> <div class="mb-3"> <label class="form-label" asp-for="FormB.DetailInfo"></label> <textarea class="form-control" asp-for="FormB.DetailInfo"></textarea> <span asp-validation-for="FormB.DetailInfo" class="text-danger"></span> </div> </div> <!-- 提交按钮 --> <div class="mb-3"> <button type="submit" class="btn btn-primary">提交</button> </div> </form> </div> </div> } else { <p>请先<a asp-page="/Account/Login">登录</a>以访问表单。</p> } </div> @section Scripts { <script> // 根据布尔值动态显示/隐藏Form B const activateCheckbox = document.getElementById('activateFormB'); const formBContainer = document.getElementById('formBContainer'); activateCheckbox.addEventListener('change', function() { formBContainer.style.display = this.checked ? 'block' : 'none'; }); // 页面加载时根据初始值设置显示状态 window.onload = function() { if (activateCheckbox.checked) { formBContainer.style.display = 'block'; } } </script> }
内容的提问来源于stack exchange,提问作者Veck
相关产品推荐
相关产品推荐

