[翻译-ASP.NET MVC]Contact Manager开发之旅之迭代2 - 修改样式,美化应用

简介:
本翻译系列为 asp.net mvc官方实例教程。在这个系列中,Stephen Walther将演示如何通过ASP.NET MVC framework结合单元测试、TDD、Ajax、软件设计原则及设计模式创建一个完整的Contact Manager应用。本系列共七个章节,也是七次迭代过程。本人将陆续对其进行翻译并发布出来,希望能对学习ASP.NET MVC 的各位有所帮助。由于本人也是个MVC菜鸟,且E文水平亦是平平,文中如有疏漏敬请见谅。
注:为保证可读性,文中Controller、View、Model、Route、Action等ASP.NET MVC核心单词均未翻译。

 

ContactManager开发之旅-索引页

ContactManager开发之旅 迭代1 - 创建应用程序

迭代2 - 修改样式,美化应用

这次迭代中,我们通过修改ASP.NET MVC的母板视图及CSS来改善应用程序的观感。

本次迭代

本次迭代的目标是改善Contact Manager应用程序的表现。Contact Manager当前使用的是ASP.NET MVC默认的母板视图和CSS(图1)。虽然并不难看,可我不也并不希望我们的Contact Manager看起还和其他的ASP.NET MVC站点都一个模子刻出来的。我希望自定义这些文件。

clip_image001

图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 Gallery

ASP.NET MVC Design Gallery是微软提供的一项免费资源。你可以通过如下网址访问。http://www.ASP.net/mvc/gallery

ASP.NET MVC Design Gallery中收集了大量为ASP.NET MVC项目量身定做的免费的网站设计。而这些设计都是社区中的爱好者贡献的。大家可以为你欣赏的设计投上一票。(图2)

image

图2

我写这篇文章时,gallery中最受欢迎的设计是来自David Hauser的叫做October的模板。你可以同过以下步骤将这个模板与你的ASP.NET MVC项目完全结合。

  1. 点击Download按钮下载October.zip文件至你的计算机上。
  2. 右击下载的October.zip文件选择解压缩
  3. 将文件解压缩到October文件夹中。(图3)
  4. 选择October文件夹下的子文件夹DesignTemplate内的所有文件,点击鼠标右键,选择复制
  5. 在VS解决方案资源管理器窗口中右击ContactManager项目节点并将上一步复制的文件粘贴进来。(图4)
  6. 选择VS菜单中的编辑->查找和替换->快速查找。将[YourProjectName]替换成ContactManager。(图5)

image

图3

image 

图4

image

图5

完成以上的步骤后,你的web应用程序就换装成功了。看看效果(图6)

clip_image001[5]

图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所示的样子。

clip_image001[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 { id=item.Id }) %>
                |
    <%= Html.ActionLink("Delete","Delete",new { id=item.Id }) %>
            </td>

Html.ActionLink()方法并不支持图片链接(出于安全考虑。改方法将链接中方的HTML文本都进行了encode)。因此,我在这里用Url.Action()代替了Html.ActionLink()方法,像这样:

<td class="actions edit"> <a href='<%= Url.Action("Edit", new {id=item.Id}) %>'> <img src="http://www.cnblogs.com/Content/Edit.png" alt="Edit" /></a> </td> <td class="actions delete"> <a href='<%= Url.Action("Delete", new {id=item.Id}) %>'> <img src="http://www.cnblogs.com/Content/Delete.png" alt="Delete" /></a> </td>

HTML.ActionLink()方法程呈现一个具体的HTML超链接,而Url.Action()方法只呈现不带<a>标签的URL。

此外,新的设计中包含选中以及非选中标签的样式。如图8中,Create New Contact 标签是选中状态,而My Contacts标签则处于非选中状态。

clip_image001[9]

图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 class="selected" 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文件和母板视图文件实现自定义页面设计。为了适应这些新的设计并为之提供支持,我们需要为Contact Manager应用程序做一些小小的改动。例如添加一个新的名为MenuItemHelperd 的HTML helper用来显示选中/非选中状态下的标签。

在下次迭代中。我们会着手处理非常重要的验证课题。如“当一个用户不填写firstname或lastname时,他将不能新建新的联系人信息”这类的验证,我们会通过将验证相关的代码添加到应用中进行处理。









本文转自紫色永恒51CTO博客,原文链接:http://www.cnblogs.com/024hi/archive/2009/03/19/ASP_NET_MVC_SAMPLE_CONTACT_MANAGER_2.html ,如需转载请自行联系原作者




相关文章
|
4月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
184 10
|
2月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
2月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
129 2
|
4月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
172 6
|
4月前
|
开发框架 JavaScript 前端开发
|
5月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
451 3
|
5月前
|
缓存 Java API
【揭秘】.NET高手不愿透露的秘密:如何让应用瞬间提速?
【8月更文挑战第28天】本文通过对比的方式,介绍了针对 .NET 应用性能瓶颈的优化方法。以一个存在响应延迟和并发处理不足的 Web API 项目为例,从性能分析入手,探讨了使用结构体减少内存分配、异步编程提高吞吐量、EF Core 惰性加载减少数据库访问以及垃圾回收机制优化等多个方面,帮助开发者全面提升 .NET 应用的性能和稳定性。通过具体示例,展示了如何在不同场景下选择最佳实践,以实现更高效的应用体验。
67 3
|
5月前
|
前端开发 JavaScript 开发工具
跨域联姻:React.NET——.NET应用与React的完美融合,解锁前后端高效协作新姿势。
【8月更文挑战第28天】探索React.NET,这是将热门前端框架React与强大的.NET后端无缝集成的创新方案。React以其组件化和虚拟DOM技术著称,能构建高性能、可维护的用户界面;.NET则擅长企业级应用开发。React.NET作为桥梁,使.NET应用轻松采用React构建前端,并优化开发流程与性能。通过直接托管React组件,.NET应用简化了部署流程,同时支持服务器端渲染(SSR),提升首屏加载速度与SEO优化。
113 1
|
5月前
|
存储 缓存 安全
.NET 在金融行业的应用:高并发交易系统的构建与优化之路
【8月更文挑战第28天】在金融行业,交易系统需具备高并发处理、低延迟及高稳定性和安全性。利用.NET构建此类系统时,可采用异步编程提升并发能力,优化数据库访问以降低延迟,使用缓存减少数据库访问频率,借助分布式事务确保数据一致性,并加强安全性措施。通过综合优化,满足金融行业的严苛要求。
64 1
|
5月前
|
大数据 开发工具 开发者
从零到英雄:.NET核心技术带你踏上编程之旅,构建首个应用,开启你的数字世界探险!
【8月更文挑战第28天】本文带领读者从零开始,使用强大的.NET平台搭建首个控制台应用。无论你是新手还是希望扩展技能的开发者,都能通过本文逐步掌握.NET的核心技术。从环境搭建到创建项目,再到编写和运行代码,详细步骤助你轻松上手。通过计算两数之和的小项目,你不仅能快速入门,还能为未来开发更复杂的应用奠定基础。希望本文为你的.NET学习之旅开启新篇章!
46 1