mvc项目问题清单以及解决方法

项目开发中遇到的一些问题以及解决方法.

1. 脚本相关

  • mvc中RemoteAttribute使用,在IE浏览器下面会将结果缓存起来(304).因为IE浏览器判断Url的链接参数都没有变化,所以直接返回上一次的结果(304结果),但是其实我是需要重新再验证.

    解决方式:直接在jquery.validate.unobtrusive.js的remote方法中加上时间戳即可.
    var remoteUrl = options.params.url;
    var remoteUrlAppendTime = remoteUrl + (remoteUrl.indexOf('?') > -1 ? "&" : "?") + new Date().getTime();

  • jquery validate 在IE10 下出现 js错误(成员找不到)的修正

    解决方式:
    this.attr('novalidate', 'novalidate');
    //====>修改为下面即可
    if (typeof (Worker) !== "undefined") { this.attr('novalidate', 'novalidate'); }

  • jquery调用webapi的参数仅仅只有一个数组(array).web api是如下定义public Result TestArray(string[] testArr);

    解决方式:
    将该数组直接弄成对一个参数名为空的对象.如下代码所示:
    var arr=[1,2];var obj={"":arr};$.ajax({data:obj...});

    2.样式相关

  • 笔者需要处理一些响应式布局,鉴于笔者对css 比较小菜鸟.在使用@media screen and (max-width:450px)进行对移动端进行兼容.但是考虑到IE8下不能使用media进行query

    解决方式:
    下载css3-mediaqueries.js脚本放置到

    3.Web Api端

  • web api生成文档,笔者这边使用web api help直接生成的文档.然而,针对分层的解决方案,在api help页面上不显示其注释的内容.

    解决方法:
    ①在.Areas.HelpPage.HelpPageConfig指向一个xml改变成指向指定的文件夹
    config.SetDocumentationProvider(new XmlDocumentationProvider( HttpContext.Current.Server.MapPath("~/App_Data")));
    ② 在XmlDocumentationProvider构造函数中,通过文件夹获取文件夹下的注释xml;删除_documentNavigator变量,并添加private List _documentNavigators = new List();
    public XmlDocumentationProvider(string appDataPath)
    {
    if (appDataPath == null)
    {
    throw new ArgumentNullException("appDataPath");
    }
    var files = Directory.GetFiles(documentPath, "*.xml");
    foreach (var file in files)
    {
    XPathDocument xpath = new XPathDocument(Path.Combine(appDataPath, file));
    _documentNavigators.Add(xpath.CreateNavigator());
    }
    }
    ③ 增加xml选择器的代码
    private XPathNavigator SelectSingleNode(string selectExpression)
    {
    foreach (var navigator in _documentNavigators)
    {
    var propertyNode = navigator.SelectSingleNode(selectExpression);
    if (propertyNode != null) return propertyNode;
    }
    return null;
    }
    ④ 将_documentNavigator.SelectSingleNode调用修改为第三步的方法名.至于将各个分层注释生成到指定文件夹,可以自己配置.

    4.部署相关(主要是发布时一些小优化)

  • 对于IIS无法加载js与css的问题

    解决方法:在控制面板上打开或关闭window功能中的Internet信息服务里的万维网服务=>常见HTTP功能=>静态内容,安装之就可以完成

  • 启动浏览器本地缓存

    操作:IIS管理器中指定的网站上,Http响应标头==>常用标头==>勾取使web过期之后7天;在mvc的web.config 的

  • iis启动gzip压缩

    操作:iis管理器指定网站的"压缩"==>勾取启动静/动态内容压缩,有利于加快访问传输数据

  • 在线测试网页的访问速度,笔者这边使用卡卡网网站进行检测,该网站会提出一些优化建议,各位看官不知道还有没有好用??

    5.写在最后

  • 网页的访问速度更很多方面挂钩,不仅仅部署的时候注意.其实更多的是数据库操作以及一些必要的缓存策略.
  • 对于数据库方面更多就是更多的注意批量操作的以及跨表查询.现在ORM框架都比较成熟,如EF,NH等,查询方面需要明白IQueryable与IEnumerable区别?是使用懒惰加载还是贪懒加载?批量插入是一条条插入还是直接批量直接插入?等等方面多考虑
  • 缓存笔者这边更多就使用原生的HttpRuntime.Cache进行缓存一些经常用到的配置信息等等.
  • 代码的可读性/稳定性,都需要留心注意.因为当别人坑你的时候你不爽,就应该想到自己不要留坑给别人
    希望能给你一点点帮助!

一些参考
http://*.com/questions/21895257/how-can-xml-documentation-for-web-api-include-documentation-from-beyond-the-main
http://www.iis.net/configreference/system.webserver/staticcontent/clientcache
http://kwilson.me.uk/blog/post-an-array-of-objects-to-webapi-using-jquery/
http://jingyan.baidu.com/article/597035521b96e88fc00740af.html
http://www.cnblogs.com/alicePanZ/p/4789687.html

上一篇:WIN7 VMware Ubuntu虚拟机连接secureCRT及ftp传输文件


下一篇:django学习-10.django连接mysql数据库和创建数据表