当前位置: 首页 > article >正文

别再死记硬背for循环了!用C#在Razor页面里做个动态九九乘法表,实战理解更深刻

用C#和Razor Pages打造动态九九乘法表告别枯燥的语法学习记得刚开始学编程时最让我头疼的就是那些看似简单却怎么也记不住的循环语法。直到有一天导师让我用for循环做一个能在网页上展示的九九乘法表那些抽象的表达式突然就变得生动起来。今天我就带大家复现这个让我开窍的项目——用ASP.NET Core的Razor Pages创建一个动态生成的九九乘法表。1. 环境准备与项目创建在开始之前确保你的开发环境已经安装了以下工具Visual Studio 2022社区版即可或Visual Studio Code.NET 6.0 SDK或更高版本ASP.NET Core运行时打开Visual Studio选择创建新项目然后按照以下步骤操作在搜索框中输入ASP.NET Core Web App选择ASP.NET Core Web App (Razor Pages)模板为项目命名例如MultiplicationTable选择.NET 6.0作为框架版本点击创建按钮提示如果你更喜欢使用命令行可以打开终端并运行dotnet new webapp -n MultiplicationTable来创建项目。2. 理解Razor Pages的基本结构创建好项目后你会看到以下关键文件和文件夹MultiplicationTable/ ├── Pages/ │ ├── Shared/ │ ├── _Layout.cshtml │ ├── Index.cshtml │ └── Index.cshtml.cs ├── wwwroot/ ├── appsettings.json └── Program.cs对于我们的九九乘法表项目主要关注的是Pages/Index.cshtml和Pages/Index.cshtml.cs这两个文件Index.cshtmlRazor页面视图负责HTML展示Index.cshtml.csPageModel类包含后端逻辑3. 实现九九乘法表逻辑3.1 在PageModel中添加乘法表生成代码打开Index.cshtml.cs文件在IndexModel类中添加以下代码public class IndexModel : PageModel { // 存储乘法表的二维数组 public string[,] MultiplicationTable { get; set; } new string[9, 9]; public void OnGet() { // 外层循环控制行 for (int i 1; i 9; i) { // 内层循环控制列 for (int j 1; j i; j) { // 存储乘法表达式和结果 MultiplicationTable[i-1, j-1] ${j} × {i} {i*j}; } } } }这段代码做了以下几件事声明了一个9x9的二维数组MultiplicationTable来存储乘法表在OnGet方法中使用嵌套的for循环生成乘法表外层循环控制行数1到9内层循环控制每行的列数1到当前行数将每个乘法表达式和结果存储在数组中3.2 在Razor页面中展示乘法表现在我们修改Index.cshtml文件来展示这个乘法表page model IndexModel { ViewData[Title] 动态九九乘法表; } div classtext-center h1 classdisplay-4动态九九乘法表/h1 table classtable table-bordered mt-4 for (int i 0; i 9; i) { tr for (int j 0; j i; j) { tdModel.MultiplicationTable[i, j]/td } /tr } /table /div这里我们再次使用了嵌套的for循环来遍历MultiplicationTable数组并以表格形式展示出来。注意外层循环遍历每一行内层循环遍历当前行的每一列使用Model访问PageModel中的属性4. 美化乘法表界面为了让我们的乘法表看起来更专业我们可以添加一些CSS样式。在wwwroot/css/site.css文件中添加以下样式.multiplication-table { margin: 20px auto; border-collapse: collapse; } .multiplication-table td { padding: 10px 15px; border: 1px solid #dee2e6; background-color: #f8f9fa; transition: all 0.3s ease; } .multiplication-table td:hover { background-color: #e9ecef; transform: scale(1.05); } .table-header { background-color: #343a40; color: white; font-weight: bold; }然后更新Index.cshtml中的表格代码table classmultiplication-table thead tr th colspan9 classtable-header text-center九九乘法表/th /tr /thead tbody for (int i 0; i 9; i) { tr for (int j 0; j i; j) { tdModel.MultiplicationTable[i, j]/td } !-- 补充空单元格使表格对齐 -- for (int k i 1; k 9; k) { td/td } /tr } /tbody /table5. 添加交互功能为了让这个乘法表更具互动性我们可以添加一些JavaScript功能。在Pages/Index.cshtml底部添加section Scripts { script document.querySelectorAll(.multiplication-table td).forEach(cell { if (cell.textContent.trim() ! ) { cell.addEventListener(click, function() { const [a, , b, , result] this.textContent.split( ); alert(${a}乘以${b}等于${result}); }); } }); /script }这段代码为每个包含乘法表达式的单元格添加了点击事件点击时会弹出一个对话框显示乘法结果。6. 调试与优化在开发过程中我们可能会遇到各种问题。以下是一些常见的调试技巧在循环中设置断点在Visual Studio中点击代码行号左侧设置断点运行程序时执行到断点处会暂停可以查看变量值、调用堆栈等信息使用Console.WriteLine调试 在PageModel中添加临时调试输出for (int i 1; i 9; i) { Console.WriteLine($正在处理第{i}行); for (int j 1; j i; j) { Console.WriteLine($ 计算{j} × {i}); MultiplicationTable[i-1, j-1] ${j} × {i} {i*j}; } }浏览器开发者工具按F12打开开发者工具使用元素选项卡检查HTML结构使用控制台查看JavaScript错误7. 扩展思考与实践现在我们已经完成了一个基本的动态九九乘法表但编程的魅力在于不断优化和扩展。以下是一些可能的改进方向7.1 支持不同尺寸的乘法表修改PageModel使其可以生成任意尺寸的乘法表public class IndexModel : PageModel { public string[,] MultiplicationTable { get; set; } public int Size { get; set; } 9; public void OnGet(int? size) { Size size ?? 9; MultiplicationTable new string[Size, Size]; for (int i 1; i Size; i) { for (int j 1; j i; j) { MultiplicationTable[i-1, j-1] ${j} × {i} {i*j}; } } } }然后在页面中添加一个表单让用户输入尺寸form methodget classmb-4 div classform-group label forsize乘法表尺寸/label input typenumber idsize namesize min1 max20 valueModel.Size classform-control d-inline-block w-auto button typesubmit classbtn btn-primary ml-2生成/button /div /form7.2 添加颜色区分不同难度根据乘法结果的数值大小添加不同的颜色public class MultiplicationItem { public string Expression { get; set; } public int Result { get; set; } public string CssClass { get; set; } } public class IndexModel : PageModel { public MultiplicationItem[,] MultiplicationTable { get; set; } public void OnGet() { MultiplicationTable new MultiplicationItem[9, 9]; for (int i 1; i 9; i) { for (int j 1; j i; j) { int result i * j; MultiplicationTable[i-1, j-1] new MultiplicationItem { Expression ${j} × {i} {result}, Result result, CssClass result 10 ? easy : result 20 ? medium : hard }; } } } }然后在CSS中添加对应的样式.easy { background-color: #d4edda !important; } .medium { background-color: #fff3cd !important; } .hard { background-color: #f8d7da !important; }7.3 添加打印和导出功能在页面底部添加按钮允许用户打印或导出乘法表div classmt-4 button onclickwindow.print() classbtn btn-outline-primary mr-2 i classfas fa-print/i 打印乘法表 /button button idexportBtn classbtn btn-outline-success i classfas fa-file-export/i 导出为图片 /button /div section Scripts { script srchttps://html2canvas.hertzen.com/dist/html2canvas.min.js/script script document.getElementById(exportBtn).addEventListener(click, function() { html2canvas(document.querySelector(.multiplication-table)).then(canvas { const link document.createElement(a); link.download 九九乘法表.png; link.href canvas.toDataURL(image/png); link.click(); }); }); /script }

相关文章:

别再死记硬背for循环了!用C#在Razor页面里做个动态九九乘法表,实战理解更深刻

用C#和Razor Pages打造动态九九乘法表:告别枯燥的语法学习 记得刚开始学编程时,最让我头疼的就是那些看似简单却怎么也记不住的循环语法。直到有一天,导师让我用for循环做一个能在网页上展示的九九乘法表,那些抽象的表达式突然就变…...

CentOS 7下Composer报错‘missing ext-fileinfo‘?别慌,手把手教你启用PHP的fileinfo扩展

CentOS 7下PHP的fileinfo扩展缺失问题全解析与实战修复指南 当你正在CentOS 7服务器上部署一个基于ThinkPHP的项目,运行composer install时突然遭遇一系列关于ext-fileinfo扩展缺失的错误提示,这确实会让人感到措手不及。这类问题在PHP项目部署中相当常见…...

《另一个伊甸》日服角色实装全记录:从2.14到1.0,你的本命角色是哪一年登场的?

《另一个伊甸》角色编年史:从2.14到1.0的时空旅人图鉴 翻开《另一个伊甸》的版本更新日志,就像展开一卷跨越五年的时空绘卷。每个数字组合背后,都藏着改变玩家队伍构成的关键角色。从2017年的1.0版本到2022年的2.14版本,这些时空旅…...

VS Code设置文件终极指南:全局vs工作区settings.json的5种打开方式

VS Code设置文件终极指南:全局vs工作区settings.json的5种打开方式 在代码编辑器的世界里,VS Code以其高度可定制性赢得了开发者的青睐。而这份灵活性的核心密码,就藏在settings.json这个配置文件中。想象一下这样的场景:当你需要…...

在Debian 11上为龙芯3A5000手动编译GCC 12.1交叉工具链:我踩过的那些坑和最终脚本

龙芯3A5000交叉工具链深度实战:从源码编译GCC 12.1的完整避坑指南 当国产CPU龙芯3A5000遇上GCC 12.1编译器,一场充满技术细节的深度定制之旅就此展开。不同于直接使用预编译二进制工具链,手动构建交叉编译环境不仅能满足特定优化需求&#xf…...

保姆级教程:用Arduino IDE 1.8.19给ESP32-CAM烧录CameraWebServer(附离线包下载)

ESP32-CAM零基础实战指南:从环境搭建到实时监控一气呵成 当拆开ESP32-CAM包装的瞬间,多数初学者会被这个火柴盒大小的智能摄像头模块震撼——它兼具Wi-Fi连接与图像处理能力,价格却不到百元。但紧接着就会陷入开发环境配置的泥潭:…...

nli-MiniLM2-L6-H768应用场景:HR简历关键词匹配与岗位适配度初筛

nli-MiniLM2-L6-H768应用场景:HR简历关键词匹配与岗位适配度初筛 1. 项目背景与价值 在人力资源招聘场景中,简历筛选是HR每天面临的高频重复性工作。传统人工筛选方式存在效率低下、主观性强、标准不统一等问题。特别是当面对大量应聘者时,…...

UCIe协议栈信号接口实战:手把手教你用FDI和RDI信号调试Chiplet互联

UCIe协议栈信号接口实战:手把手教你用FDI和RDI信号调试Chiplet互联 在当今异构集成的芯片设计浪潮中,Chiplet技术已成为突破摩尔定律瓶颈的关键路径。作为连接不同计算单元的高速通道,UCIe协议的性能直接影响着整个系统的吞吐量和延迟表现。本…...

保姆级教程:用Android Studio 2023.3 + Flutter 3.19 从零搭建开发环境到跑通第一个App

保姆级教程:用Android Studio 2023.3 Flutter 3.19 从零搭建开发环境到跑通第一个App 移动应用开发的世界正在经历一场革命,而Flutter无疑是这场革命中最耀眼的明星之一。作为Google推出的开源UI工具包,Flutter允许开发者使用单一代码库构建…...

别再只盯着参数了!手把手教你为项目选对Intel RealSense D400系列相机(D415/D435/D455对比)

别再只盯着参数了!手把手教你为项目选对Intel RealSense D400系列相机 在机器人导航、工业检测或三维重建项目中,选择一款合适的深度相机往往让人头疼。Intel RealSense D400系列凭借成熟的立体视觉技术和丰富的型号选择,成为许多开发者的首选…...

从零到可视化:用WinCC V7.5给S7-1500 PLC做个简易监控界面(附动画效果)

从零构建动态监控界面:WinCC V7.5与S7-1500 PLC实战指南 在工业自动化领域,可视化监控系统如同工程师的"眼睛",能够实时反映设备状态与工艺参数。本文将带您完成一个污水处理罐监控界面的完整开发流程,从项目创建到动画…...

RH850中断配置避坑指南:从TAUB定时器到CAN通信的实战代码解析

RH850中断配置避坑指南:从TAUB定时器到CAN通信的实战代码解析 在汽车电子和工业控制领域,RH850系列微控制器凭借其卓越的实时性能和丰富的外设资源,成为众多关键系统的首选。中断系统作为实时响应的核心机制,其配置质量直接决定了…...

Prompt Engineering实战:如何用ChatGPT API构建高效提示词模板(附LangChain代码示例)

Prompt Engineering实战:用ChatGPT API构建高效提示词模板 在AI应用开发领域,Prompt Engineering已经从简单的聊天技巧演变为一门系统的工程学科。随着大模型API的普及,如何将零散的提示词转化为可复用的工程组件,成为开发者提升效…...

用Camera2 API实现一个简易抖音拍摄功能:录制、预览与视频保存

用Camera2 API打造短视频拍摄功能:从零实现抖音式交互体验 在移动互联网时代,短视频应用已经成为人们日常生活中不可或缺的娱乐方式。作为Android开发者,掌握如何构建一个高效、流畅的短视频拍摄功能至关重要。本文将带你深入探索如何利用Cam…...

别再死记硬背YOLO的9个anchors了!用Python可视化带你搞懂它在特征图上的调整过程

用Python动态可视化拆解YOLO anchors的调整逻辑 第一次看到YOLO的9个anchors参数时,我盯着那堆数字发呆了半小时——这些宽高组合到底如何影响最终检测框?为什么调整几像素就能让模型性能波动5%?直到我用Matplotlib逐帧绘制了特征图上的坐标变…...

5个专业技巧:掌握Inter字体家族打造完美数字界面体验

5个专业技巧:掌握Inter字体家族打造完美数字界面体验 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter Inter字体家族是一款专为现代数字屏幕设计的无衬线字体系统,以其卓越的可读性、丰富的Ope…...

Ai2Psd终极指南:如何彻底解决Illustrator到Photoshop的矢量转换难题

Ai2Psd终极指南:如何彻底解决Illustrator到Photoshop的矢量转换难题 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 你是否曾为Il…...

3分钟掌握ZeroOmega:跨浏览器智能代理管理的终极指南

3分钟掌握ZeroOmega:跨浏览器智能代理管理的终极指南 【免费下载链接】ZeroOmega Manage and switch between multiple proxies quickly & easily. 项目地址: https://gitcode.com/gh_mirrors/ze/ZeroOmega ZeroOmega是一款基于manifest v3标准的开源浏览…...

终极免费打字学习工具:用Qwerty Learner打造你的键盘肌肉记忆系统

终极免费打字学习工具:用Qwerty Learner打造你的键盘肌肉记忆系统 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: …...

鸣潮自动化工具ok-ww:5分钟搞定每日重复任务的终极解决方案

鸣潮自动化工具ok-ww:5分钟搞定每日重复任务的终极解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦…...

保姆级教程:手把手为嵌入式Linux移植NAU8810音频Codec驱动(基于ALSA ASoC框架)

嵌入式Linux音频驱动实战:NAU8810 Codec移植全流程解析 当一块崭新的开发板放在你面前,而客户要求在下周之前完成音频功能的集成时,那种既兴奋又紧张的感觉,相信每个嵌入式工程师都深有体会。NAU8810作为一款高性能低功耗的音频编…...

保姆级教程:在Ubuntu 18.04上为Firefly RK3399 ProC交叉编译Python 3.7.10(含zlib、numpy、pyserial)

嵌入式开发实战:为Firefly RK3399 ProC构建定制Python 3.7环境 当你在Firefly RK3399 ProC开发板上尝试运行Python科学计算脚本时,是否遇到过性能瓶颈或依赖缺失的困扰?不同于x86平台的即装即用,ARM架构的嵌入式设备往往需要从源码…...

从‘炼丹’到‘工程’:复盘InceptionV3论文中那些被验证与‘打脸’的设计(附代码对比)

从‘炼丹’到‘工程’:InceptionV3设计思想的现代验证与技术启示 当我们在2023年回望2015年问世的InceptionV3架构,会发现它像一座横跨深度学习"炼丹时代"与"工程时代"的桥梁。这篇论文最珍贵的遗产不是某个具体模块,而是…...

Inspirit Capital将收购Kaplan Languages Group

专注于企业分拆业务投资的Inspirit Capital欣然宣布,计划从Kaplan手中收购全球领先的语言教育平台KLG Kaplan Languages Group (“KLG”)。本次出售的所有条件均已达成,预计交易将于5月1日完成。 KLG旗下拥有Kaplan International Languages、Alpadia L…...

别再混淆了!用Keil MDK调试Cortex-M3/M4时,MSP和PSP到底怎么切换的?

别再混淆了!用Keil MDK调试Cortex-M3/M4时,MSP和PSP到底怎么切换的? 调试嵌入式系统时,堆栈指针的切换问题常常让开发者头疼。特别是在RTOS环境下,MSP(主堆栈指针)和PSP(进程堆栈指针…...

文科生逆袭!零基础转行AI,我靠AI工具直接涨薪50%!

本文分享了作者从文科背景转行AI的成功经验。作者首先打破文科生不适合进入AI行业的误区,选定AI产品和提示词工程师作为切入点。接着,作者通过大量使用AI工具建立AI体感,并制作了一个轻量级的项目作品集,展示了如何利用AI工具梳理…...

告别书签混乱:3步打造你的Chrome浏览器高效书签管理系统

告别书签混乱:3步打造你的Chrome浏览器高效书签管理系统 【免费下载链接】neat-bookmarks A neat bookmarks tree popup extension for Chrome [DISCONTINUED] 项目地址: https://gitcode.com/gh_mirrors/ne/neat-bookmarks 你是否经常在浏览器中迷失方向&am…...

废旧元件DIY太阳能光控LED灯串设计

1. 项目概述这个用废旧零件拼凑起来的模拟电路项目,完美诠释了"变废为宝"的DIY精神。它由太阳能板、锂电池和几颗白光LED组成,打造出了一串既环保又充满魅力的装饰灯串。在这个被各种专用芯片和微控制器统治的时代,这个项目提醒我们…...

别再被老视频的“毛边”困扰了!手把手教你用TW9912芯片搞定隔行转逐行(附原理详解)

告别隔行扫描困扰:TW9912芯片实战指南与画质优化 想象一下,当你翻出珍藏多年的家庭录像带,满怀期待地将其数字化后,却发现播放时画面布满锯齿和闪烁——这种失落感恐怕只有经历过的人才能体会。隔行扫描技术曾是电视黄金时代的基石…...

Cadence Virtuoso 新手避坑指南:从原理图到版图,手把手搞定 AMI 0.6u 工艺下的 MOS 管仿真

Cadence Virtuoso 新手避坑指南:从原理图到版图,手把手搞定 AMI 0.6u 工艺下的 MOS 管仿真 第一次打开 Cadence Virtuoso 时,复杂的界面和密密麻麻的菜单栏让不少集成电路专业的学生望而生畏。尤其是当教授要求用 AMI 0.6u 工艺完成 MOS 管仿…...