1. Web API简单说明 近来很多大型的平台都公开了Web API。比如百度地图 Web API,做过地图相关的人都熟悉。公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验。所以我相信Web API会越来越有它的用武之地。 说道Web API很多人都会想到Web服务,但是他们仍然有一定的区别:Web API服务是通过一般的 HTTP公开了,而不是通过更正式的服务合同 (如SOAP) 2. ASP.NET Web API简介 ASP. NET Web API支持让你能够轻松地创建功能强大的 Web API,可以从范围广泛的客户端 (包括使用 JavaScript从浏览器中,到任何移动/客户端平台上的本机应用程序)访问。它提供以下支持: (1)现代 HTTP 的编程模型:在你的 Web 应用程序中直接访问和处理 HTTP 请求并响应,使用清洁、 强类型的 HTTP 对象模型。除了在服务器上支持这个 HTTP 的编程模型之外,通过使用新的 HttpClient API来从任何.NET 应用程序中调用 Web ApI,我们也支持客户端中相同的编程模型。 (2)内容协商: Web API 有对内容协商的内置支持 — — 这使客户端和服务器一起工作以决定从一个 API 返回的正确的数据格式。我们为JSON、 XML 和Form URL 编码的格式提供默认支持,并可以通过添加你自己的格式化程序来扩展这种支持,或者甚至用你自己的来替换默认的内容协商策略。 (3)查询组成: Web API 通过 OData URL 公约使你能够轻松地支持查询。当你从你的 Web API 返回一种类型的 IQueryable <T> 时,框架将自动为它提供 OData 查询支持— — 使其易于分页和排序。 (4)模型绑定和验证:模型绑定器提供了一种简单的方法来从HTTP 请求中的不同部分提取数据,并将这些信息部分转换为Web API行为可使用的.NET对象。Web API 支持相同的模型绑定和ASP. NET MVC 现今支持的验证基础结构。 (5)路由: Web ApI 支持完整的路由功能集。现今ASP. NET MVC […]
View Details刚用EF完成了一个十多个表联合、动态条件的查询,因为不熟悉表达式树的使用,就想了笨办法,下面做个总结: 1.EF无法根据条件动态join表,一开始就需要确定使用那些表,准备好数据集;所以把条件分了几个大类,只要条件都属于一个类别的,优先使用这个类别相关部分表的联合查询,能提高效率。如果条件涉及多个类别,就用一个left join所有表的数据集来查询; 2.因为是left join,当数据集中有些字段不是可空字段的时候,查询时会出现类型转换错误,这种情况下,需要在select新字段集时,不可空(null)字段做个处理:NewFieldName=p.FieldName == null ? AA : p.FieldName,这里的AA代表当字段值为空时用来替换的默认值; 3.在给EF的where条件中赋值的时候,如果是在一个foreach的循环中,用var item这个对象来给条件赋值,其结果是,所有条件全部是从最后一个item对象中取值,导致除了最后一个条件赋值正确外,其他全部是错误的。这是应为EF是在最后查询时才生成SQL语句并获取参数并执行的,它的机制中貌似只记录了参数的变量地址,而不是值。解决方法就是,在每次使用item时,定义一个新变量来保存这个对象,即使是在局部范围内定义亦可;部分示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
var qry = from p in Ent.PaInfoes where p.MOBILE != "" select new { p.CNO, p.PNAME, p.GENDER, p.BIRTHDAY, p.MARRIAGE, p.RACE, p.BLOOD, p.PURSUIT, p.MOBILE, p.MAKEDATE, p.MAKEHOSNAME, p.RESPDOCNAME, p.MAKENURNAME, p.JIGUAN, p.COMMUNI }; foreach (var item in pnlConditionList.Controls) { switch (((UCSearch)item).SearchCondition) { //姓名 case SearchCondition.scName: UCSearch usName = (UCSearch)item; if (usName.TextValue != "") qry = qry.Where(d => d.PNAME == usName.TextValue); break; from:http://lxw5214.blog.163.com/blog/static/1414733201521254112570/ |
EF实体类 entity = new EF实体类(); var query = (from u in entityt.用户表 join b in entity.权限表 on u.用户权限Id equls b.Id where u.用户Id == 1 select u).FirstOrDefault(); 两个表的linq private DataClasses1DataContext dc; dc = new DataClasses1DataContext(); var heji = (from da in dc.q1 join du in dc.q2 on da.danhao equals du.danhao where da.hetong == "XXXX" select new { du.color1, da.danhao, da.riqi, du.zhongliang, du.beizhu }).Distinct(); from:http://blog.csdn.net/findsafety/article/details/42640691
View Details如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过。这是一款商业级的编程语言,我们没有办法不接触它。 对于Java,有两种截然不同的观点:一种认为Java是最简单功能最强大的编程语言之一,另一种则表示这种编程语言既难用又复杂。 下面这些工具或许功能和作用不同,但是有着一个共同的主旨,那就是——它们都是为了给Java编码和开发提供卓越的支持。 1. JDK(Java开发工具包) 如果你打算用Java开发一些小程序和应用程序,那么首先得给自己准备一个类似于JDK的工具,其中包括必要的Java Complier、Java Runtime Environment(JRE)和Java API。这是开始Java之旅的第一步。 官方网站:http://java.com/en/download/faq/develop.xml 2. Eclipse IDE 如果咨询一些经验丰富的Java开发人员关于他们最喜欢的Java Integrated Development Environment(IDE)是什么,不少人会告诉你是Eclipse IDE。 Eclipse能提供关于代码完成、重构和语法检查这些急需的帮助。它还能提供JDT的一系列工具,包括各种插件工具来帮助开发各种Java应用。 此IDE的真正优势是它允许开发人员使用不同的语言支持,如它也可以提供C/ C++和PHP 的IDE。这使得它成为了Java开发的一个一站式资源。 官方网站:http://www.eclipse.org/ 3.NetBeans 这又是一个IDE,提供了功能全面的阵列,如转换器,编辑器和代码分析器,这些工具可以帮助你使用最新的Java技术实现应用程序。工具范围相当广泛,而且IDE背后的团队也在不断地改进。此外你还可以得到静态分析工具的帮助——编写出无bug的代码。 官方网站:https://netbeans.org/ 4. IntelliJ IDEA 13.1 据传它有“最智慧的Java IDE”之称。如果你尝试过后,就会发现它所言不虚,因为它能帮助开发人员拿出最具有创造性的解决方案。它的“Smart Code Completion”和“On-the-fly Code Analysis”功能等可以提高开发人员的工作效率,并且还提供了对web和移动开发高级支持。所以,不妨试试这个好助手。 官方网站:http://www.jetbrains.com/idea/ 5.Oracle JDeveloper 如果你正在寻找一个免费的IDE来构建一个面向服务的架构,那没有比JDeveloper更好的了。它支持完整的开发生命周期,这意味着你可以放心自豪名正言顺地使用ava解决方案。 官方网站:http://www.oracle.com/technetwork/developer-tools/jdev/overview/index.html 6. JUnit 这是一个可以帮助开发人员编写和运行测试的单元测试框架。但是JUnit和市场上一些类似的框架还有着本质的区别。你可以一次测试一个代码块,而不需要等待该模块在运行测试前完成。实际上就是你可以“先测试,然后写代码”,这意味着对于应用程序的最终功能如何你可以先放下心中的大石了。 官方网站:http://junit.org/ 7. Apache ANT™ 这是一个开源工具,其最大的优势就是简单。关键是可以实现开发人员处理复杂和重复性任务的目标。ANT™,可以自动执行此类任务。这还只是其众多简化功能之一而已。 官方网站:http://ant.apache.org/ 8. JRAT(Java Runtime Analysis Toolkit) 如果你想要评测应用程序的性能,那么就必须具备JRAT这个分析工具。有了这个工具,你可以找出潜在的可能会影响应用程序性能的问题域。 官方网站:http://jrat.sourceforge.net/ 9.Apache JMeter™ 这是Apache的另一种工具,主要用于测试。它可以评测功能行为以及网站、数据库、Web服务等的性能。它有一个易于理解的GUI,这一事实意味着你可以轻松地构建测试计划并迅速调试应用程序。 官方网站:http://jmeter.apache.org/ 10.Apache Maven 上面曾提到过Apache ANT™,而现在的Maven能帮助你做同样的事情。不过,很多开发人员表示相比ANT™,Maven前进了一大步。在依赖管理、构建行动、调试和协作方面,它都比ANT™略高一筹。简单地说,如果你正在使用ANT™,那么你需要告诉它到底应该怎么做:你需要提供资源的确切位置,分配生成的位元码的存储位置以及用JAR文件打包。 Maven,换句话说,则简化了这些东西。 官方网站:http://maven.apache.org/index.html 11.Gradle 如果你想要有这样一种工具,可以结合ANT™和Maven的优点,那么你一定会喜欢Gradle。有了Gradle,你就可以在Groovy编码——这是一个巨大的优势,因为它允许你编写任何代码。这个工具的第二大优势是,它支持惯例优先配置的模式。 官方网站:http://www.gradle.org/ 12.Clover 该工具提供了Java和Groovy代码覆盖。Clover能让你直接瞄准问题可能性最大的部分,确保测试侧重于特定代码。 官方网站:https://www.atlassian.com/software/clover/overview 13.YourKit 这是一个Java分析工具,允许在开发或生产过程中按需分析:这意味着你可以确保你的产品符合最高的质量标准。按需分析指的是,被分析的应用程序可以在不产生任何费用的情况下运行。 官方网站:http://www.yourkit.com/ 14.Mockito 如果你想用干净和简单的API编写测试,Mockito应该就是你的首选。Mockito本质上是一个模拟库,可以帮助你创建、验证和清除模块——Java开发的几个重要方面。 官方网站:https://code.google.com/p/mockito/ 15. FindBugs的™ Java代码有bug?如何才能找到它们呢?——没错,就是FindBugs的™。它不但免费,还易于操作,真心很不错! 官方网站:http://findbugs.sourceforge.net/ 这15个工具,能让你的Java开发工作更为轻松便捷,但是前提是要因地制宜,根据需求选择适合的工具,然后你才能受益无穷。 from:http://www.php100.com/html/it/biancheng/2015/0121/8428.html
View Details原因1:给定目录下jvm.dll不存在。 对策:(1)重新安装jre或者jdk并配置好环境变量。(2)copy一个jvm.dll放在该目录下。 原因2:eclipse的版本与jre或者jdk版本不一致 对策:要么两者都安装64位的,要么都安装32位的,不能一个是32位一个是64位。 原因2的概率更大一些,原因1不太可能发生。 from:http://blog.csdn.net/zyz511919766/article/details/7442633/
View DetailsRendering Problems the following classes could not be found: android.support.v7.internal.widget.ActionBarOverlayLayout (Fix Build Path, Edit XML, Create Class) Tip: Try to build the project 是什么问题 把你的style文件中theme改一下 在Theme.AppCompat.Light.DarkActionBar前面加上Base. 如下 <!-- Base application theme. --> <style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> </style> app-debug.apk
View Details前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解。System.ComponentModel.DataAnnotations 一、基础特性 一、Required 必填选项,当提交的表单缺少该值就引发验证错误。 二、StringLength 指定允许的长度 指定最大长度:
1 |
[StringLength(20)] //最大长度不超过20个字符 |
指定最短于最长限制:
1 |
[StringLength(20,MinimumLength=3)] //最大长度不超过20个字符,最短不能低于3个字符 |
三、RegularExpression 正则表达式能够匹配的字符串,如果不能匹配,则报一个验证错误
1 |
[RegularExpression(@"[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")] |
如邮箱格式验证:
1 |
[RegularExpression(@"^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$", ErrorMessage = "请输入正确的电子邮箱地址!")] |
四、Range Range特性用来指定数值类型值的最小值和最大值。
1 2 |
[Range(35,44)] //整型,最小35,最大44 [Range(typeof(decimal),"0.00","49.99")] //decimal类型 |
五、Remote 允许利用服务器端的回调函数执行客户端的验证逻辑。说白了就是支持AJAX验证。 需要引用命名空间:System.Web.Mvc; 这个写个异步验证用户名是否存在的DEMO:
1 2 3 4 5 6 7 |
[Required] [Remote("CheckUserName", "Home")] public string UserName { get; set; } |
Controller代码:
1 2 3 4 5 6 7 8 9 |
public JsonResult CheckUserName(string UserName) { bool result = true; if (UserName == "admin") { result = false; } return Json(result,JsonRequestBehavior.AllowGet); } |
显示结果: 留意到,是通过AJAX发送UserName的值到服务器端判断过的。 六、Compare 用于确保模板对象的两个对象拥有相同的值。 例如,通常输入密码之后还要求用户再次确认密码,这时候就是Compare属性发挥作用的时候了。
1 |
[Compare("要对比的属性名")] |
以上特性需要 using System.ComponentModel.DataAnnotations; 同时需要注意Web.config里面的这两个选项是否设置为了true;
1 2 |
<add key="ClientValidationEnabled" value="true"/> <add key="UnobtrusiveJavaScriptEnabled" value="true"/> |
二、自定义错误提示消息 每个特性都允许传递一个带有自定义错误提示消息的参数。
1 2 3 4 5 6 7 |
[Required(ErrorMessage="用户名必须填写")] [Remote("CheckUserName", "Home",ErrorMessage="此用户名已存在")] public string UserName { get; set; } |
自定义错误消息,还有一个格式项,如
1 2 3 4 5 6 |
[Required(ErrorMessage="{0}必须填写")] publit string Name { get; set; } |
则{0}在输入的时候会被Name替换。 如果以上的验证方式还不够,你还可以自定义验证,到时候忘记了可以翻《Asp.net MVC3 高级编程》第127页。这里就不写DEMO了,用到再写。 三、显示和编辑注解 1、Display 如果使用的是直接EditorForModel实现的话,Display特性可以帮助你设置友好的显示名称 例如:
1 2 |
[Display(Name="密码")] public string PassWord { get; set; } |
显示结果如下: 其次Display还支持显示属性的顺序,如
1 2 3 4 |
[Display(Name="密码",order = 15000)] public string PassWord { get; set; } [Display(Name="密码",order = 15001)] public string UserName { get; set; } |
后面的顺序是显示编辑框的顺序,默认是10000,按升值排序。 2、ScaffoldColumn 隐藏Html辅助方法(如EditorForModel,DisplayForModel)显示一些属性。
1 2 |
[ScaffoldColumn(false)] //不显示该属性的编辑框 public string UserName { get; set; } |
虽然ScaffoldColumn可以做到不显示一些属性在页面上被编辑,但是如果提交的Form有这个属性值,模型绑定机制依然会绑定此属性值。要解除就要显式的[Bind]了,这个与本篇无关。此处不提。 3、DisplayFormat DisplayFormat特性可以用来处理属性的各种格式化选项。当属性包含空值时,可以提供可选的显示文本,也可以为包含标记的属性关闭HTML编码,还可以为运行时指定一个应用于属性值的格式化字符串。 例如:
1 2 |
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")] public decimal money { get; set; } |
这样,当有初始值的时候,显示的代码将如下所示: 注意是初始值,如果是直接填写的并不会有符号。来看Controller中设置的初始值:
1 2 3 4 5 6 |
public ActionResult PersonAdd() { Person_Model p = new Person_Model(); p.money = 12.10M; return View(p); } |
此显示样式在提交回Controller中是没用的,因为模型绑定器将不能解析返回的价格值。怎么用自己斟酌,用于显示还是OK的。 4、ReadOnly 如果确保默认的模型绑定器不使用请求中的新值更新属性,可以给属性添加ReadOnly特性:
1 2 |
[ReadOnly(true)] public string Name { get; set; } |
注意,此属性仍然会显示一个可编辑的文本框来显示Name,但是模型绑定器不会接收其值,因此只有模型绑定器考虑ReadOnly属性。 5、DataType DataType特性可以为运行时提供关于属性的特定用途的信息。 例如:
1 2 |
[DataType(DataType.Password)] public string PassWord { get; set; } |
显示效果如下: 该属性可以用于指定多选按钮,单选按钮,密码输入框,等等类型的数据。 6、UIHint UIHint特性给Asp.net MVC运行时提供了一个模板名字,以备调用模板辅助方法如(DisplayFor和EditorFor)渲染输出时使用。也可以自定义自己的模板辅助方法来重写Asp.net MVC的默认行为。 7、HiddenInput HiddentInput在名称空间System.Web.Mvc中,它可以告知运行时渲染一个type特性值为"hidden"的输入元素。说白了就是<input type="hidden" value="xxx" /> 四、验证示例 首先新建一个MVC项目。添加如下代码,代码非常简单:一个Person_Model类 […]
View Details此枚举用于指定要与数据列或参数关联的数据类型。 成员名称 说明 Custom 表示自定义的数据类型。 DateTime 表示时间上的一刻,以日期和当天的时间表示。 Date 表示日期值。 Time 表示时间值。 Duration 表示对象存在的一段连续时间。 PhoneNumber 表示电话号码值。 Currency 表示货币值。 Text 表示所显示的文本。 Html 表示一个 HTML 文件。 MultilineText 表示多行文本。 EmailAddress 表示电子邮件地址。 Password 表示密码值。 Url 表示 URL 值。
View Details[HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperson = db.People.Where(p => p.Id == person.Id).FirstOrDefault(); //TODO db.Entry(person).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(person); } 上边代码试图在更新person到数据库前取出旧数据(oldperson)进行文件删除等操作,结果页面报错: 引用内容 ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。 若是不取旧数据,该段代码执行可以正常执行,经过一番测试,猜测原因是读取旧数据时,对象会被添加到db中,当执行"db.Entry(person)"时,试图把person也添加到db中,但person和先前添加对象的键值是一样的,因而报错,这也解释了为什么不取旧数据不出错。 下边提供三种解决方法: Person oldperson = db.People.Where(p => p.Id == person.Id).FirstOrDefault(); //TODO oldperson.PicUrl = person.PicUrl; db.SaveChanges(); Person oldperson = db.People.AsNoTracking().Where(p => p.Id == person.Id).FirstOrDefault(); //TODO db.Entry(person).State = EntityState.Modified; db.SaveChanges(); Person oldperson = db.People.Where(p => p.Id == person.Id).FirstOrDefault(); //TODO db.Entry(oldperson).CurrentValues.SetValues(person); db.SaveChanges(); from:http://www.mzwu.com/article.asp?id=3527
View DetailsApple App Store里有130万的app,而Google Play则托管了140万的app。在竞争如此激烈的移动应用环境中如何确保我们制作的app能获得大量的下载量呢? 广受用户欢迎,并创下了上百万的下载量是每一个移动app开发人员的终极梦想。但是,这谈何容易呢! 在最近的一次网络研讨会上,Rahui Nischal,Nucleus Software Exports公司的高级产品经理,就谈到了开发人员要想创建有吸引力的移动app,所需要关注的几个关键方面。 1.理念是根本 一个移动app的成功取决于它是建立在什么样的核心理念上的。对于开发人员而言,第一步要做的是像目标用户那样思考,用他们的眼光去看待问题,并 在此基础上构建移动app,构建可以让他们的生活更简单的app。步步为营,不断地检查app与最终用户的相关性,积极调整产品以满足用户的需求。 2.单一的服务目标 一个移动app只需要具备单一的功能。确定你app的主要目的,然后钻研能否只通过一到两次点击就可以访问进入。 3.保持简单 保持一切简单化其实是最难的。如果移动开发人员可以成功地将复杂的技术隐藏在简单界面的后面,那么他就越靠近成功。 4.保持轻量级 三年前,Facebook的应用程序重达35-40M。现在,它只有大约10M。之所以会产生如此大的变化,是因为Facebook认识到,在印度和非洲——甚至连3G还尚未普及的区域,下载重量级的移动应用程序往往需要一段又长又难挨的时间。 由于现在的移动app都是面向全球的,所以开发人员最好能够创建轻量级的应用程序以便适应不同地域。 5.UI很重要 WhatsApp在推出之前从来不做广告。虽然现在网上提供了许多的聊天应用程序,但是WhatsApp的用户使用量还是达到了成倍的增长。它成功的秘诀就是干净和简单的UI。为了确保界面友好,我们在创造移动应用的时候需要关注三件事——愉悦性、实用性和功能性。 6.倾听用户的声音 应用程序在发布之后,开发人员应该时刻关注用户的反馈,更新进步,努力提供更新更好的功能。 7.了解用户行为 游戏“愤怒的小鸟”的开发人员发现,Android用户不喜欢为下载应用程序付费,而iOS用户,大多数则愿意购买app,但却讨厌在免费app上面看到任何广告。了解不同的用户行为,有助于移动开发人员为不同类型的用户创建令人满意的消费体验。 from:http://www.oschina.net/news/64613/mobile-app-developers-should-focus-on-7-things
View Details