离线在MVC4中的使用
最近在项目中用到了离线功能,自己感觉挺高端的,但是遇到了一些问题。
现在工作告一小段落,就把这次离线工作中遇到的关键技术点和难题记录下来。
什么是离线,什么时候需要离线
离线:Offline,不联网也能使用。简单说就是在线的时候下载保存一些文件到本地,然后在离线的时候,依赖这些文件实现类似在线的操作。最好做到让使用者没有明显的感觉到在线、离线的区别。
什么时候需要离线:比如我们要去深山老林做一些考察,那里没有Wifi,没有移动信号,但是我们需要保存一些数据到移动电子设备上。这时候离线就是一个不错的选择。
在项目中是如何做到的离线
1 所有的需要离线操作的View对应的Action返回Model的时候,增加一个标记字段,比如Bool? IsOffline{get;set;},离线为True,其他为False;
2 所有的View中增加一个离线Layout,基本模式是
@{
ViewBag.Title = "Offline";
if (Model.IsOffline)
{
Layout = "~/Views/Shared/_OfflineLayoutView.cshtml";
}
}
3 OfflineLayoutView是离线功能的一个核心点--Manifest。
<!DOCTYPE html>
<!--[if (gte IE 9)|!(IE)]><!-->
<html lang="en" id="html" manifest="@Url.Action("Manifest", "Offline", new { area = "" })">
<!--<![endif]—>
这里指向了一个Action :Manifest
View :Manifest是一个列表清单文件,列下了所有需要在离线中使用到的文件,包括但不仅限于Js,Css,View等。
大致代码如下
1: @using System.Configuration;
2: @{
3: Response.ContentType = "text/cache-manifest";
4: Response.ContentEncoding = System.Text.Encoding.UTF8;
5: Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
6:
7: Layout = null;
8: }CACHE MANIFEST
9: #@Model.LastBuild
10:
11: <text>@Url.Action("Offline***List", "***", new { area = "**" })</text>
12: NETWORK:
13: *
14:
15: CACHE:
16: #CSS files
17: @Url.Content("~/Content/")**.css
18:
19: #JS files
20: @Url.Content("~/Scripts/")jquery-1.8.3.min.js
4 在在线的界面中增加一个按钮 Enter Offline Model,链接到上述View的某一个即可。
之后就进入离线了,第一次进入离线的时候会下载所有清单文件到本地。
下载之后的文件可以在Chrome浏览器中清楚的看到,地址 :chrome://appcache-internals/
IE的查看方法暂时还不明了
遇到的一些问题
1 在我的开发环境下是每次Build工程之后才会下载文件,但是同事的环境是修改之后刷新就会下载,和普通的在线没什么区别。
注意这可能是一个坑,因为修改了源文件,直接刷新,可能没有起到作用,浏览器没有变化,请检查是否下载了修改后的文件;
2 Jquery的问题。 View中某一元素设置Class为Phone,然后
<script type="text/javascript">
if (jQuery.validator) {
jQuery.validator.addMethod("phone", function (phone_number, element) {
phone_number = phone_number.replace(/\s+/g, "");
return 。。。。。;
}, "Please specify a valid phone number");
。。。。
来判断输入的是否是合法的电话号码
在线的时候没任何问题,离线就各种不好使。最后无奈在 $(document).ready()中重写了一遍才OK
2014/3/24 修改 终于查明了原因,在Layout中引入了Jquery,在View中再次引入了一遍,造成冲突
可以进入离线了,但是没有联网,数据怎么保存呢?项目中使用的是LocalStorage
下篇文章预告:LocalStorage的一些使用
离线在MVC4中的使用的更多相关文章
- MVC4中基于bootstrap和HTML5的图片上传Jquery自定义控件
场景:mvc4中上传图片,批量上传,上传前浏览,操作.图片进度条. 解决:自定义jquery控件 没有解决:非图片上传时,会有浏览样式的问题; 解决方案; 1.样式 – bootstrap 的css和 ...
- Autofac在MVC4中牛刀小试
Autofac是传说中速度最快的一套.NET高效的依赖注入框架.Autofac的介绍与使用请去参考Autofac全面解析系列(版本:3.5). 这里介绍的已经挺详细的啦. 下面我就先来说说MVC4 ...
- ASP.NET MVC4中的bundles特性引发服务器拒绝访问(403错误)
在ASP.NET MVC4中微软引入了bundles特性,这个特性可以将服务器端的多个Javascript或多个css文件捆绑在一起作为一个单一的URL地址供客户端浏览器调用,从而减少了页面上Http ...
- MVC4中使用Ninject
MVC4中使用Ninject 1.NuGet获取Ninject.dll .NET技术交流群 199281001 .欢迎加入. 2.全局注册 Global.asax.cs RegisterNinje ...
- mvc4中jquery-ui日期控件datepicker的应用
mvc4中jquery-ui日期控件datepicker的应用 本文适合mvc中日期选择需要的同学: 假设读者已经具备了mvc4和javascript中的相关知识 一. 开始项目之前把项目中目录:/C ...
- WebSocket在ASP.NET MVC4中的简单实现
WebSocket在ASP.NET MVC4中的简单实现 2013-12-21 20:48 by 小白哥哥, 810 阅读, 3 评论, 收藏, 编辑 WebSocket 规范的目标是在浏览器中实现和 ...
- ASP.NET MVC4中使用NHibernate
ASP.NET MVC4中使用NHibernate 1:下载安装NHibernate 打开 VS 2012新建一个 MVC4项目. 在项目名称上右击选择Manage NuGet Packages.你会 ...
- MVC4中使用SignalR
MVC4中使用SignalR 前言 周末在偶尔翻阅微软官网的时候看到Getting Started with SignalR and MVC 4此篇文章,知道了signalr这个东西,貌似这个出来很长 ...
- MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates)
转载于: MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates) 虽然 [Display(Name="XX ...
随机推荐
- SpringBoot整合RabbitMQ,实现消息发送和消费以及多个消费者的情况
下载安装Erlang和RabbitMQ Erlang和RabbitMQ:https://www.cnblogs.com/theRhyme/p/10069611.html AMQP协议 https:// ...
- java定义object数组(可以存储String或int等多种类型)
需求| 想在数组中既有String类型又有int等类型,所以需要定义数组为Object类型 背景| 现在有一个字符串params,需要对其进行逗号分隔赋值到数组里,这时遇到了个问题,即使直接定义的 ...
- oracle 函数的返回值与out参数
函数的return值是调用函数返回的结果. 而out参数就是单纯的赋值. 例子: function test(aaa in varchar, bbb out integer) return integ ...
- mysql分组GROUP BY常用sql
数据分组 GROUP BY GROUP BY可以根据一个或多个字段进行分组. 比如,根据prod_id分组: SELECT prod_id ,user_id FROM products GROUP B ...
- chase
chase 英[tʃeɪs] 美[tʃes] vt. 追求; 追捕; 追寻; 镂刻; n. 追捕; 打猎; 猎物(指鸟兽等); 槽; vi. 追逐,追赶; 追寻; 追求(常与after连用); [口语 ...
- Java自学之路(小白向)
首先学习一门语言无非就受教与自学两种方式,本博文针对自学(穷逼没钱报班,大学又不是计算机专业,只能自学啊) 开个玩笑,其实有很多人是适合自学的,下面介绍. 一.要充满自信我自己就可以学好(够面试用的入 ...
- 对于装office 365时,visio不兼容的解决
先将office 365装好,之后从这个网址下载visio安装即可,但是没有 激活码,需要自己激活: 网址:链接: https://pan.baidu.com/s/1OqONPuJ0eumrpts-X ...
- mysql垂直分区和水平分区
数据库扩展大概分为以下几个步骤: 1.读写分离:当数据库访问量还不是很大的时候,我们可以适当增加服务器,数据库主从复制的方式将读写分离: 2.垂直分区:当写入操作一旦增加的时候,那么主从数据库将花更多 ...
- 【nginx】大文件下载
nginx自带文件读取功能,而且实现地很好. 比如直接读取txt文件,png图片等,用chrome可以直接获取到内容. 但是对于很大的文件,比如有2个G的视频,nginx如何吐出2G的内容呢? 实验: ...
- 30-算法训练 最短路 spfa
http://lx.lanqiao.cn/problem.page?gpid=T15 算法训练 最短路 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个n个顶点, ...