Asp.net笔记(2)

  1. Aspx中使用cs中的函数及成员时需要注意该函数类型为protected或者public

  2. Asp.net的服务端控件和客户端控件ID不见得一样。服务端控件在内网环境和后台环境下使用是很方便的。而HTML控件用于前台。物尽其用。

  3. 获取客户端控件ID方法: 服务端id.ClientID

document.getElementById(‘<%=TextBox1.ClientID%>’)

JQuery同理。

  1. Aspx中asp标签的控件的css样式:CssClass=”…”,等同于HTML中class属性。也可以单独修改控件样式,但不建议这样做。会生成大量冗余代码。

  2. 控件的Attributes用于设置控件的额外属性。

  3. Label渲染成Span,若设置了AssociateControlID属性,就渲染成label,且for属性为关联的控件id。

  4. Literal不做任何渲染,就是文本。将其mode属性设置为encode后,可以自动对文本进行编码,防止xss漏洞。

  5. TextBox控件的AutoPostBack属性为true时,当该控件失去焦点,就自动Post。ASP.net中要提交表单时最好使用_doPostBack()方法。

  6. RadioButton渲染为 input type=”radio”, 通过GroupName进行分组。

  7. Button等控件可以通过Command以及CommandName,CommandArgument来统一处理。

  8. Panel是容器,如果GroupingText的属性设置了,就渲染成有filedset的div,否则直接为div

  9. HyperLink,能将虚拟路径转化为客户端路径。

  10. FileUpload控件使用说明:需要增加上传文件的类型及权限。防止恶意攻击。

  11. Jquery使用注意:$(“#<%=TextBox1.ClientID%>”).val() 只有<%%>里的是服务端代码。

  12. 控件的display:none和visibility:hidden都能实现隐藏,区别是:display:none不占空间

  13. 页面中的IsValid属性用来判断所有验证控件是否验证完成

  14. 控件的CausesVilidation属性为false则该控件不能被验证控件验证。

Asp.net笔记(1)

  1. Get和post区别
  • Get通过url显式传递参数,参数传递长度有限

  • Post隐式传递,可以传递数据量较大的数据

  1. 表单只可提交有name 的input 、select、textarea的value。对于不能提交value的,例如div。可以用hidden类型的input代替传送。这就是ASP.NET的viewstate机制的由来。

  2. 大量的数据不能存储在hidden或者viewstate中,会增加上传流量,导致网页速度变慢。同时表单中不能存储机密数据,会造成数据欺骗。

  3. 后台变量不能保存B端的值,对此引用session机制与cookie。Session是B端用户相关信息与S端内存的对应关系。Cookie将这些信息数据保存在本地。Session中不能存储过大的数据,并且超过一段时间会自动清除。例如在线编辑文章,编辑时间过长导致提交时出现文章提交失败,超时或者丢失。优化网页案例:网站主站域名与音乐站,图像站等大流量子站域名区分开,防止cookie的大量提交更新。

  4. 每一个请求都会new一个实现了IHttpHandler接口的类的实例进行处理,用完后就GC,不会保留。

  5. JS作为客户端校验能方便用户,但js被禁用后会引起不必要的麻烦,所以数据限制等功能还要在服务端做处理。

  6. asp:Button标签中 OnClientClick为客户端点击事件,onclick是服务端点击事件。

  7. VirtrualPathUtility虚拟路径方法:

  • ToAbsolute(“/ex.aspx”) 将虚拟路径/ex.aspx转换为绝对路径

  • AppendTrailingSlash(“”) 判断虚拟路径最后是否有/,如果没有就加上

  • Combine(“”,””) 合并两路径,需要注意路径一的末尾如果没有/就找到最后一个/处进行合并,例如Combine(“/a/b”,”c.html”)合并为/a/c.html

  1. Response对象:
阅读更多

由装饰模式巩固继承

最近学习《大话设计模式》,在学习的过程中又加深了对OO的理解,诸如abstract和virtual的区别之类的问题有了清晰的认识。今天通过装饰模式,重温OO的继承,巩固子类于父类的构造函数调用,子类调用父类方法等问题。

先看一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Person
{
public Person()
{
Console.WriteLine("Person“);
}
}
class Man : Person
{
public Man()
{
Console.WriteLine("Man");
}

}

然后我们在主函数中实例化子类Man

1
Man jack = new Man();
阅读更多

程序集

Assembly即程序集是一个由类型定义、数据文件和资源文件组成的逻辑集合。每个程序集都包含一个程序集清单,该清单通常被附加在某个头文件上,也可以设置单独建立一个文件来包含该清单。

在编译程序集中间代码之前,CLR需要找到合适的程序集中间代码,其加载机制分为主动加载方式与通过名称、版本、文化和公钥来加载程序集。

1. 程序集的主动加载方式:

程序集的加载可以完全忽略任何策略,由程序员在程序中显式的通过位置加载。System.Reflection.Assembly.LoadFrom提供了这个功能。此方法通过接收一个codebase风格的字符串,用以确定所要加载程序集的位置:

1
2
3
4
5
String codebase = @"../../../example/Compile/Compile.dll";

Assembly mycompile = Assembly.LoadForm(codebase);

Object compile = mycompile.CreateInstance("***.Compile");
阅读更多

CTS、CLI、CLS和CLR

CTS、CLS和CLR是.Net框架的基本概念,但往往成为程序员忽视的部分。

CLR即Common Language Runtime, 可以把CLR理解为一个包含运行.Net程序的引擎和一些符合公共语言基础结构的类库的集合。它是一个规范的CLI实现。所谓的.Net框架一般就是指公共语言运行库。

CLI公共语言基础,是微软向ECMA提交的一份语言和数据格式规范(包括了CTS,中间语言CIL、底部文件格式和元数据格式等),它是目前为止,唯一一个公共语言基础的实现版本。

CTS的全称为Common Type System 通用类型系统。定义了一个能够在CLR上运行的语言规范,需要注意的是,尽管很多语言本省不符合CTS规范,但通过加强编译器,改变语言附加规范等手段,使得许多语言能够编写出在CLR上运行的程序,比如C++

CLS公共语言规范是CTS的一个子集,它定义了希望编写在.Net平台上运行的程序的语言所需符合的最小的规范。因为.Net允许由不同语言编写的程序一起运行,所以制定出CLS规范。

阅读更多

WPF中UI及时更新

不管是在winform还是在WPF中,我们要做一个进度条,用在一个大循环或者一个耗时的处理中,首先想到的就是多线程。否则进度条会出现假死现象,进度条不会更新。做多线程是比较麻烦的,如果只是简单的更新UI,可以用Systems.DoEvents。

在winform中,使用PeekMessage处理完消息队列,使UI有机会更新。在WPF中,可以在Dispatch里使用PushFrame达到同样的效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void DoEvents()
{

DispatcherFrame frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
new DispatcherOperationCallback(delegate(object f)
{


((DispatcherFrame)f).Continue = false;

return null;
}
), frame);
Dispatcher.PushFrame(frame);
}

写了这个方法后,我们在循环中或者事件中,在需要更新的UI后面调用一下DoEvents()就可以了。

C#进程控制示例-sqlserver的停止与启动

当我们在对sql server进行复制,重命名,移动,删除操作时,由于系统将sql服务开启,所以无法直接进行操作,需要将服务停止,操作完成之后再重新开启。停止与开启的方法可以利用SQL Server Management Studio,还可以在cmd下使用net start/stop mssqlserver。在C#程序中,为了方便对sql服务的开关,可以用以下两种方法:

方法一:利用C#执行cmd语句net start/stop mssqlserver。此方法就不详细叙述了。

方法二:利用进程控制。

先添加引用

阅读更多

你必须知道的C#的25个基础概念

原作者:reonlyrun

1.静态变量和非静态变量的区别?

静态变量: 静态变量使用 static 修饰符进行声明 在所属类被装载时创建 通过类进行访问 所属类的所有实例的同一静态变量都是同一个值 非静态变量: 不带有 static 修饰符声明的变量称做非静态变量 在类被实例化时创建 通过对象进行访问 同一个类的不同实例的同一非静态变量可以是不同的值

2.const 和 static readonly 区别?

const 用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序 static readonly 用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化

阅读更多

WPF的bmp和二进制转换

bmp转二进制:

1
2
3
FileStream fs = File.OpenRead(filepath); //filepath文件路径
Byte[] tempBuff = new Byte[fs.Length];
fs.Read(tempBuff, 0, tempBuff.Length);

二进制还原bmp:

1
2
3
4
5
BitmapImage BI = new BitmapImage();
BI.BeginInit();
BI.StreamSource = new MemoryStream(bufPic); //bufPic是图片二进制,byte类型
BI.EndInit();
image_emp.Source = BI;//image_emp是图片控件