内容概述

前面絮絮叨叨没正事,到现在为止也没有开始写代码,不过在考虑下貌似这一节还是开始不了。

B/S架构开发有一个特点,就是用浏览器打开,不同的用户群体可能有不同的风格,不论是管理平台还是普通的网站,也是有自己的风格。

我们要做这样一个管理系统,风格上没有客户来约束要做什么样,那简单处理,我们采用如下处理

  • Bootstrap :据说是Twitter工程师觉得前端工作太麻烦然后就弄了一套框架出来,现在有三个版本并行,2.x,稳定版本是3.x.x,开发中的是v4.x,在2018年1月18号发布了正式版。在接触Bootstrap之前,做B/S架构的项目是很麻烦的,首先要找一个美工来设计一套页面,然后还要考虑各种浏览器兼容,CSS,Js等等都要考虑。bootstrap首先页面统一,另外是响应式的、移动端优先的一套框架。尤其适合快速原型等。
  • JQuery:很多年历史了,当年js很难写,后来出了JQuery,解决了很多兼容性的问题,Dom操作也变得简单得多。也是有多个版本,1.X兼容性比较宽,对IE支持较好。2.X和3.X抛弃了一些对就浏览器的兼容。所以用jQuery的时候要先确定好客户端需要的兼容性,然后在考虑那个版本。
  • Bootstrap Admin模板:网上有不少基于Bootstrap构建的Admin模板,就看各位在网上查找资源的本领了。Github是一个大宝库,程序员一定要能利用起来。这里极少一个MIT开源协议的,基于Bootstrap 3.x版本构建的一套Admin管理模板 。地址:https://adminlte.io/

现在用angular和vue做项目的也有不少,和咱这里有比较大的区别,因为一个是SPA一个MPA,具体区别大家去查一下。如果自己构造的话,可能会用到各种插件,综合来说,插件选择要考虑成本、易用度、是否稳定版本、文档是否齐全、是否有人维护(有了问题有人修复)。简单看下本项目中用到两个前端插件:

  • datatable:基于MIT开源协议,可以随便用。文档比较完备,有官网论坛,除了开源版本还有扩展的商业授权版本。缺点:缺少中文文档。
  • jstree:基于MIT开源协议,可以随便用。文档比较完备,有官网论坛,支持插件扩展,如果有能力可以自己写扩展。缺点:老外写的, 没中文文档。

开始干活

在MVC项目中,定位到Views/Shared/_Layout.cshtml。打开layout,这个和webform中的模板页类似,基于Razor语法构建的模板。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>@ViewBag.Title</title>
  5. <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
  6. <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
  7. </head>
  8.  
  9. <body>
  10. @RenderBody()
  11. </body>
  12. </html>

这是一个标准的Layout布局页,其中,@RenderBody()是模板页中嵌套部分的标记(语言没及格,不知道怎么说了)。可以理解为把一个HTML页面中挖出一个空来,共享外面的部分,个性化就是里面的部分。当不同的页面使用这个layout时候,风格比较统一,公共部分都在layout.cshtml这个页面上。

如果是使用Bootstrap进行样式布局的话,Bootstrap提供了一套标准样式

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
  8. <title>Bootstrap 101 Template</title>
  9.  
  10. <!-- Bootstrap -->
  11. <link href="css/bootstrap.min.css" rel="stylesheet">
  12.  
  13. <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
  14. <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
  15. <!--[if lt IE 9]>
  16. <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  17. <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
  18. <![endif]-->
  19. </head>
  20. <body>
  21. <h1>你好,世界!</h1>
  22.  
  23. <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
  24. <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
  25. <!-- Include all compiled plugins (below), or include individual files as needed -->
  26. <script src="js/bootstrap.min.js"></script>
  27. </body>
  28. </html>

把两者集合到一起,得到我们想要的布局页:

  1. @{
  2. //模板页也可以再次嵌套模板页
  3. Layout = null;
  4. }
  5.  
  6. <!DOCTYPE html>
  7. <html lang="zh-CN">
  8. <head>
  9. <meta charset="utf-8">
  10. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  11. <meta name="viewport" content="width=device-width, initial-scale=1">
  12. <title>一个标准的Layout布局页</title>
  13. <link href="css/bootstrap.min.css" rel="stylesheet">
  14.  
  15. @* 给继承页面预留的样式窗口 *@
  16. @RenderSection("styles", false)
  17.  
  18. <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
  19. <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
  20. <!--[if lt IE 9]>
  21. <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  22. <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
  23. <![endif]-->
  24. </head>
  25. <body>
  26. <div class="content-wrapper">
  27.  
  28. <section class="content">
  29. @*继承页面内容填充到这里*@
  30. @RenderBody()
  31. </section>
  32. </div>
  33.  
  34. <script src="~/Scripts/jquery-1.12.4.min.js"></script>
  35. <script src="js/bootstrap.min.js"></script>
  36.  
  37. @* 给继承页面预留的js脚本窗口 *@
  38. @RenderSection("scripts", false)
  39. </body>
  40. </html>

当添加视图的时候,将“使用布局页”勾选,并选择一个布局页,然后书写代码如下:

  1. @{
  2.  
  3. //说明了视图页是嵌套在_Layout.cahtml这个布局页的
  4. Layout = "~/Views/Shared/_Layout.cshtml";
  5.  
  6. //一般设置页面的标题,显示在浏览器tab签上
  7. ViewBag.Title = "MVC布局页的实例";
  8. }
  9.  
  10. @*
  11. 在这里设置视图页个性化的样式内容,比如引入一些css文件,编写一些class等等
  12. 会渲染到于布局页中的 @RenderSection("styles", false)的位置
  13. *@
  14. @section styles{
  15. <style type="text/css">
  16. h2 {
  17. font-size: 48px;
  18. }
  19. </style>
  20. }
  21.  
  22. <div class="well">
  23. <h2>Hello Trump!</h2>
  24. </div>
  25.  
  26. @*
  27. 在这里编写视图页的页面脚本或引入一些js文件。
  28. 内容会渲染到布局页中 @RenderSection("scripts", false)的位置
  29. *@
  30.  
  31. @section scripts{
  32. <script type="text/javascript">
  33. $(function () {
  34. alert("hello ivanka!");
  35. })
  36. </script>
  37. }

基本上布局页的使用就这些,网上各种说明有一大堆,真正用的时候碰到问题可以查找一下,没有多少问题。

最后看一下我们设计好的后台首页,下一节将处理一下EF公共类的问题。

用MVC5+EF6+WebApi 做一个考试功能(五) 前端主题的更多相关文章

  1. 用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类

    前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...

  2. 用MVC5+EF6+WebApi 做一个小功能(三) 项目搭建

    一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了.好吧,就叫Trump吧.没有任何含义 ...

  3. 用MVC5+EF6+WebApi 做一个小功能(一)开场挖坑,在线答题系统

    从哪开始说呢,这几年微软的技术一直在变,像是牟足了劲要累死所有的NET程序员,从WebForm到MVC到现在MPA.SPA .Razor单页,从net2.0一直走到现在.net4.6.2,后面还有一个 ...

  4. 用MVC5+EF6+WebApi 做一个小功能(二) 项目需求整理

    在一个项目开始前,需求整理大概要占到整个项目周期15%甚至30%的比重,可以说需求理得越清楚,后续开发中返工几率越小.在一个项目中,开发新功能的花费的精力要远远小于修改功能的精力,这基本是一个共识.老 ...

  5. 用MVC5+EF6+WebApi 做一个小功能(四) 项目分层功能以及文件夹命名

    在上一节,我们完成了一个项目搭建,我们看到的是一个项目的分层架子,那接下来每一层做什么以及需要引用哪些内容呢?在本节内容我们还逐步拆分每一层的功能,顺带添加package包 Trump.Domain ...

  6. TTS-零基础入门-10分钟教你做一个语音功能

    在本片博客正式開始之前,大家先跟我做一个简单的好玩的 小语音. 新建一个文本文档,然后再文档里输入这样 一句话  CreateObject("SAPI.SpVoice").Spea ...

  7. 利用random模块做一个抢红包功能

    我们都知道random模块是一个生成随机数的模块,用它来做抢红包的功能很合适. 抢红包,抢到的金额是随机的,但怎么让每个人抢到的随机金额公平合理呢 比如:我想发一个100元的红包让10个人抢,我可以把 ...

  8. 使用reactjs做一个CRUD功能

    第一步:引入reactjs所依赖的js文件,本案例使用的是bootstrap前端框架,所以引入了相应的js和css文件 第二步:body里面添加两个div 第三步:开始编写reactjs脚本 < ...

  9. MVC5 + EF6 入门完整教程二:从前端的UI开始

    从前端的UI开始 MVC分离的比较好,开发顺序没有特别要求,先开发哪一部分都可以,这次我们主要讲解前端UI的部分. ASP.NET MVC抛弃了WebForm的一些特有的习惯,例如服务器端控件,Vie ...

随机推荐

  1. C#数字类型输出字符串时保留指定小数位数的方法

    1.使用占位符: 1)float f = 321.12345F;f.ToString("0.00");这样做无论f是不是整数,都将加上2位小数. 2)float f = 321.1 ...

  2. Swift 基本语法03-"if let"和"guard let"

    1. /// 如果JY_WINDOW有rootViewController, 并且rootViewController类型是AdvertisementViewController,就执行stopPla ...

  3. Django之virtualenv下安装xadmin

    1.安装xadmin,通过pip 进入virtualenv pip安装xadmin pyyuc:~ yuchao$ source PycharmProjects/mxvenv/bin/activate ...

  4. window下装redis扩展(以php5.5为例)

    一.安装redis服务 1.下载并解压 https://github.com/dmajkic/redis/downloads 2.运行redis服务 3.检查能否正常访问  二.安装redis扩展 1 ...

  5. Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js

    生产材料PHP:PHP 5.6+Laravel 5.4:https://github.com/laravel/laravel/releases/Composer:http://getcomposer. ...

  6. htmlparser学习(原创)

    --thumbelina.jar  这是一个演示图片搜索和显示的小程序JFrame Preferences.userNodeForPackage(getClass());  根据传入的class所在包 ...

  7. Confluence无法打开编辑器,一直在转圈

    在管理员界面中,将Collaborative editing 设置为Off 或者 Limited . 快速找到该界面的方式是,在搜索框里搜索 “Collaborative editing”. 折腾了几 ...

  8. 2018.07.20 bzoj2152: 聪聪可可(点分治)

    传送门 本蒟蒻AC的第二道点分治,调了30min" role="presentation" style="position: relative;"&g ...

  9. SQL查询优化的一些建议

    使用批量查询,而不是N次循环查询! 重复的数据,不要重复获取: 根据需要,按需要获取表字段,而不是SELECT *: 针对频繁的搜索字段,建立必要的索引,以加快查询速度: 使用关联查询,而不是粗暴地类 ...

  10. jsp调用java servlet

    1.依赖jar servlet-api.jar 2.工程结构 3.java servlet实现类 package testServlet; import java.io.IOException; im ...