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

技术考试需求代码验证:多角色登录与布尔值控制子表单激活

代码合规性专业判断

需求回顾

  • 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的列表。

现有代码问题分析

你的代码和需求存在明显差距,具体问题如下:

  1. 角色支持不完整:只处理了Admin角色,完全没实现第二种角色的访问逻辑,不符合需求a中“两种用户角色”的要求,非Admin用户连表单都看不到。
  2. 表单结构缺失:只有Form A的部分字段,完全没有Form B的代码,不符合需求b中“两个录入表单”的要求。
  3. 布尔值逻辑错误:代码里的bolAdmin是硬编码的true,不是用户在Form A里设置的布尔值,根本实现不了“用户选了true才激活Form B”的核心逻辑,当前的分支判断和需求无关。
  4. 仪表盘完全缺失:没有任何展示Form A列表的代码,不符合需求b和c的要求。
  5. 数据绑定失效:输入框没绑定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:30:17