P.NET MVC]Contact Manager开发之旅之迭代2 - 修改样式,美化应用
次迭代本次迭代的目标是改善Contact Manager应用程序的表现。Contact Manager当前使用的是ASP.NET MVC默认的母板视图和CSS(图1)。虽然并不难看可我不也并不希望我们的Contact Manager看起还和其他的ASP.NET MVC站点都一个模子刻出来的。我希望自定义这些文件。图1在这次迭代的过程中我们将我将从两个途径着手从而改善我们应用程序的页面设计。首先我将示意如何通过ASP.NET MVC Design gallery下载免费的ASP.NET MVC设计模板。ASP.NET MVC Design gallery得以让你不费力气的建立专业的web应用程序页面表现。我原本并未决定为Contact Manager应用程序套用ASP.NET MVC Design gallery中提供的模板因为我手中有一个出自专业设计公司的页面设计方案。所以在第二部分中我将说明我是如何与设计公司合作并建立最终的ASP.NET MVC设计的。ASP.NET MVC Design GalleryASP.NET MVC Design Gallery是微软提供的一项免费资源。你可以通过如下网址访问。http://www.ASP.net/mvc/galleryASP.NET MVC Design Gallery中收集了大量为ASP.NET MVC项目量身定做的免费的网站设计。而这些设计都是社区中的爱好者贡献的。大家可以为你欣赏的设计投上一票。图2图2我写这篇文章时gallery中最受欢迎的设计是来自David Hauser的叫做October的模板。你可以同过以下步骤将这个模板与你的ASP.NET MVC项目完全结合。点击Download按钮下载October.zip文件至你的计算机上。右击下载的October.zip文件选择解压缩。将文件解压缩到October文件夹中。图3选择October文件夹下的子文件夹DesignTemplate内的所有文件点击鼠标右键选择复制。在VS解决方案资源管理器窗口中右击ContactManager项目节点并将上一步复制的文件粘贴进来。图4选择VS菜单中的编辑-查找和替换-快速查找。将[YourProjectName]替换成ContactManager。图5图3图4图5完成以上的步骤后你的web应用程序就换装成功了。看看效果图6图6自定义ASP.NET MVC页面设计ASP.NET MVC Design Gallery为改善ASP.NET MVC应用程序页面设计提供的众多模板着实的方便你的选择而且节省了很多力气。当然其最大的优点就是免费—完全免费。不过你可能需要为你的站点提供独立的设计方案。那么也许你会与建站方面的设计公司进行合作我也是如此。我将迭代1中的Contact Manager打包并发送给设计公司。他们那可没有VS不过那也不是什么问题。他们可以在http://www.ASP.net免费下载Microsoft Visual Web Developer从而打开我发过去的Contact Manager项目解决方案。几天后他们已经将页面设计成如图7所示的样子。图7新的设计主要由两个文件组成一个新的CSS文件和一个新的母板页视图文件。母板页包含页面的布局及ASP.NET MVC的view可复用的内容。例如母板页包括页头、导航标签、页脚图7。于是我将Views\Shared文件夹中的Site.Master用这个新的从设计公司拿到的Site.Master文件覆盖掉。设计公司还创建了一个新的CSS文件和一些图片。同样的我将老的CSS文件用这个新的Site.css替换掉并把那些文件都放在了Content文件夹下。需注意新的Contact Manager页面设计方案中为编辑设新增联系人这两个链接增加了小图片。表格中每行前面的链接将被这些图片所替换。原本这两个链接是像这样使用HTML.ActionLink()方法生成的td % Html.ActionLink(Edit, Edit, new { iditem.Id }) % | % Html.ActionLink(Delete,Delete,new { iditem.Id }) % /tdHtml.ActionLink()方法并不支持图片链接出于安全考虑。改方法将链接中方的HTML文本都进行了encode。因此我在这里用Url.Action()代替了Html.ActionLink()方法像这样td classactions edit a href% Url.Action(Edit, new {iditem.Id}) % img srchttp://www.cnblogs.com/Content/Edit.png altEdit //a /td td classactions delete a href% Url.Action(Delete, new {iditem.Id}) % img srchttp://www.cnblogs.com/Content/Delete.png altDelete //a /tdHTML.ActionLink()方法程呈现一个具体的HTML超链接而Url.Action()方法只呈现不带a标签的URL。此外新的设计中包含选中以及非选中标签的样式。如图8中Create New Contact标签是选中状态而My Contacts标签则处于非选中状态。图8为了方便呈现选中及非选中标签我新建了一个叫做MenuItemHelper的自定义HTML helper。这个helper方法根据当前controller、action中是否符合特定的名称而呈现li或li class”selected”标签。MenuItemHelper的代码如下using System; using System.Text; using System.Web.Mvc; using System.Web.Mvc.Html; namespace ContactManager { /// summary /// This helper method renders a link within an HTML LI tag. /// A classselected attribute is added to the tag when /// the link being rendered corresponds to the current /// controller and action. /// /// This helper method is used in the Site.Master View /// Master Page to display the website menu. /// /summary public static class MenuItemHelper { public static string MenuItem(this HtmlHelper helper, string linkText, string actionName, string controllerName) { string currentControllerName (string)helper.ViewContext.RouteData.Values[controller]; string currentActionName (string)helper.ViewContext.RouteData.Values[action]; var sb new StringBuilder(); if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase)) sb.Append(li class\selected\); else sb.Append(li); sb.Append(helper.ActionLink(linkText, actionName, controllerName)); sb.Append(/li); return sb.ToString(); } } }MenuItemHelper方法使用TagBuilder类创建li标签。任何时候你想创建一个新HTML标签TagBuilder类都将十分有用。它封装了添加属性、添加样式、生成Id和修改标签内部HTML的诸多方法。总结在本次迭代中我们改进了ASP.NET MVC应用程序的页面设计。首先介绍了ASP.NET MVC Design Gallery从而你学会了如何从ASP.NET MVC Design Gallery中下载免费的设计模板用于ASP.NET MVC应用程序中。接下来我们探讨了如何修改默认的CSS文件和母板视图文件实现自定义页面

相关新闻

供不应求!三星2026年Q2营业利润或达563.5亿美元,扩产却面临多重挑战

供不应求!三星2026年Q2营业利润或达563.5亿美元,扩产却面临多重挑战

三星Q2营业利润有望飙升18倍7月6日消息,伦敦证券交易所集团LSEG旗下SmartEstimate模型综合30家机构分析师预测,三星2026年第二季度营业利润有望达到86万亿韩元(折合563.5亿美元),较去年同期4.7万亿韩元同比飙升约18倍&…

2026/7/7 0:47:45阅读更多 →
小白程序员必看:收藏这份大模型应用开发转行指南,36岁也能吃香!

小白程序员必看:收藏这份大模型应用开发转行指南,36岁也能吃香!

文章针对前端岗位低迷,尤其是大龄前端的困境,提出通过学习AI大模型应用开发实现转行的建议。核心内容包括:基础能力自测清单、职业诉求确认、行业市场调研、岗位分层调研、年龄就业市场调研、薪资成本回报测算以及作品集落地要求。文章强调通…

2026/7/7 0:47:45阅读更多 →
免费前端开发库认证终极指南:从零到专业的三步进阶法

免费前端开发库认证终极指南:从零到专业的三步进阶法

免费前端开发库认证终极指南:从零到专业的三步进阶法 【免费下载链接】freeCodeCamp freeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free. 项目地址: https://gitcode.com/GitHub_Trending/fr/free…

2026/7/7 0:47:45阅读更多 →
第 6 篇:模块自升级与自动回滚——空中换引擎

第 6 篇:模块自升级与自动回滚——空中换引擎

升级是分布式系统中最容易出事故的操作。本文不只是讲怎么升级,更是讲"升级失败了怎么办"——用 updateBody/createBody 双重定义 健康检查窗口 自动回滚,实现即使断电也能安全完成升级。一、开篇场景:一次升级引发的血案 周五下…

2026/7/7 1:42:49阅读更多 →
【共创季稿事节】HarmonyOS 6.1 应用级状态管理:AppStorage与PersistentStorage实战

【共创季稿事节】HarmonyOS 6.1 应用级状态管理:AppStorage与PersistentStorage实战

承接上篇《MarqueeLink打造电商商品列表页》,本文解决一个所有电商App都必须面对的核心痛点:用户关闭App后,购物车数据怎么保留?​ 前几篇我们讲的State/Link都是组件级内存状态,App进程被杀后数据直接清零。本文将深入…

2026/7/7 1:42:49阅读更多 →
Spring Security密码安全实践:BCrypt算法原理与集成指南

Spring Security密码安全实践:BCrypt算法原理与集成指南

1. 项目概述:为什么Spring Security必须用BCrypt?如果你正在用Spring Security做用户认证,并且还在用明文或者简单的MD5、SHA-1存密码,那你的系统安全防线可能已经形同虚设了。这不是危言耸听,而是我见过太多项目在安全…

2026/7/7 1:42:49阅读更多 →
1200kV冲击发生器现场布置与级数选择

1200kV冲击发生器现场布置与级数选择

1200kV/120kJ雷电冲击电压发生器用于220kV至500kV电压等级电力设备的雷电冲击耐压试验,产生1.2/50μs标准雷电冲击全波,也可配置截波装置产生截波。设备典型结构为12级100kV或6级200kV两种方案。第一次见到1200kV冲击发生器的时候,第一反应是…

2026/7/7 1:42:49阅读更多 →
别只会 telnet!nc 命令才是网络调试天花板,附完整案例

别只会 telnet!nc 命令才是网络调试天花板,附完整案例

一、简介 nc(Netcat)被誉为网络瑞士军刀,轻量命令行网络工具,支持 TCP/UDP 连接、端口扫描、测速、文件传输、简易聊天、后门调试等,绝大多数 Linux 自带,无自带可通过包管理器安装。 二、安装 Netcat 1. D…

2026/7/7 1:37:49阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →