摘要:
最近在解析淘宝中商品的信息,结果出现乱码,如: 原因就是中文字符格式出现冲突,ASP.NET MVC 默认采用utf-8,但是淘宝网页采用gbk。 在网上找了一下,最常用的解决方法就是修改web.config:< system.web> ...... < globalization requestEncoding="gbk" responseEncoding="gbk" culture="zh-CN" fileEncoding="gbk" /> ...... < /system.web 阅读全文
摘要:
验证是ASP.NET MVC开发中一个非常重要的环节,包括客户端和服务端验证。幸好,MVC提供了非常简便的数据注解(Data Annotations)来帮助我们进行这项工作。1.验证性的数据注解MVC本身内置了一些常用的数据注解,像是Required,DisplayName等等,我会在下面一一讲解。 最常用的就是Required,像是下面这样: 使用Required可以指定错误消息:[Required(ErrorMessage = "First Name is required")]public string FirstName { get; set; }使用Require 阅读全文
摘要:
因为最近需要使用C#,所以特意花了几天时间看了下C#的基本语法。其中,分部类型就引起了我的注意。 分部类型是C#中一个很神奇的地方,它允许我们将一个类型的定义散布在各个文件中。像是下面这样的例子://Example1.cspublic partial class Example{ public string mName = "Example";}//Example2.cspublic partial class Example{ public void Show(){ Console.WriteLine(mName); }} 然后我们通过一个测试类来测试:... 阅读全文
摘要:
最近刚学ASP.NET MVC,虽然只是敲了个简单的例程,但收获还是有的。 MVC中最基本的东西就是:Model(模型),View(视图),Controller(控制器)。对于这三者的关系必须要非常清楚,尤其是在程序的运行中,这三者是怎样相互配合。简单来讲,控制器决定行为,模型存放数据,视图显示行为处理数据后的结果(或者是单纯的显示数据),实际上远比这个复杂得多。 控制器由一系列操作组成,这些操作一般都是返回一个ActionResult,而ActionResult包括Json,View等等。先说说View。 View()方法的使用非常简单。默认无参的重载版本返回的是与操作同名的视图,像是下面这 阅读全文
摘要:
HtmlHelper方法是ASP.NET MVC中非常强大的特性,有了这个特性,我们就能更加随心所欲的定制自己的页面。 自定义自己的HtmlHelper方法通常有三种, 像是:一.Razor语法 采用Razor的方式非常直观,像是这样:@model IEnumerable<MusicShop.Models.Album>@{ ViewBag.Title = "Index";}@helper Truncate(string input, int length){ if (input.Length <= length) { @input; } else ... 阅读全文
摘要:
OOP的类型其实可以用这样的等式:数据 + 方法,数据决定类的属性,方法决定类的行为。方法在类型设计中至关重要,因为它决定了该类的功能。 C#的方法除了拥有一般OOP语言都会有的构造器方法外,还具有C++的操作符重载方法,而且它本身也有自己的特有方法:转换操作符方法,扩展方法和分部方法。 我们先来了解一下构造器方法。1.构造器方法 C#的构造器和java是一样的,主要的作用就是初始化成员变量,就连构造器的加载顺序也是一样,只是有些地方的说法不同。 我们都知道,抽象类的默认构造器访问权限是protected,而一般类都是public(记住,是默认构造器,如果是自定义构造器,请一定要写上publi 阅读全文
摘要:
现在总算是进展到OOP最重要的类型了,感觉很兴奋但又困惑,因为C#中有很多与其他OOP语言像是java大不相同的处理。1.可见性 C#中的可见性很多与java重叠并且意义相同,但有一个特别的internal(internal其实并不特别)。internal表示仅对定义程序集(assembly)中的所有代码可见,至于其他程序集不可见。我的第一眼感觉就是java的默认访问权限,即包访问权限,至少它们是类似的。事实上,CLR中的程序集的确对应包,因为它的定义就是一个或多个模块/资源文件的逻辑性分组,而且是重用,安全性及版本控制的最小单元,这些都符合包的特点。正如包访问权限是java的默认权限一样,C 阅读全文
摘要:
装箱(boxing)机制是一个值得单独拿出来讨论的话题,因为忽略它,我们会在不知不觉间犯下很大的错误。先说说装箱的过程:会先在堆中分配好内存,该内存大小为值类型所有字段和添加的类型对象指针以及同步块索引所需的字节,然后将值类型字段复制到这块新分配的内存中,接着返回对象的地址值,即该对象的引用。拆箱并不是装箱的逆操作:拆箱只是获取一个引用,该引用指向值类型的字段,它并不要求复制字段,复制字段实际上拆箱之后的动作,但这个动作是一定会发生。 装箱设计到字段的复制,所以需要特别小心。但C#中有一个隐式装箱机制,使得我们很多时候防不胜防。所以,最好的做法就是显式的进行转换,而不是交给编译器。 如果大家. 阅读全文
摘要:
要了解一门编程语言,首先就要了解它的类型。我们知道,C#一共分为两大类型:值类型和引用类型,但值类型并不单纯是我们java中的基本数据类型那么简单,有关于是否使用值类型还是个值得讨论的问题:因为装箱机制。C#的值类型还能够自定义方法,甚至能够实现引用类型的接口类型!这已经超出了我的想象范围了! 先来点基础的东西:基本内容. 文档是我们学习的好帮手,在C#的文档中,我们必须注意,凡是引用类型的,名字都是"xx类",凡是值类型的,就叫"xx结构"或"xx枚举"。 很多时候,我们的初始化操作的右值是表达式。如果左值是值类型,那么它的值就是表 阅读全文
摘要:
在C#中,delegate是一个神奇的关键字,值得拿出来单独作为一个话题。一.基本内容 调用(invoke)委托,相当于调用委托所绑定的方法,一个委托可以绑定多个方法,使用"+="就可以向委托中添加新的方法,使用"-="可以从委托中删除方法:public delegate void Print();class Program{ public static void Main(String[] args){ Print print = PrintMethod1; print += PrintMethod2; print(); ... 阅读全文