标签存档: ASP.NET

1,055 查看

使用xsd,让你的config文件更健壮

xml在Asp.net中应用得非常之多,很多时候,我们自己还需要加入新的配置文件,对于新的配置文件,如果我们使用xsd对xml进行约束的话,会让整个配置文件更容易排错,也更有利于程序的健壮性。 最主要!! 实现起来非常简单。 下面简述过程。 【第一步】 首先我们先写一个最简的情况的xml,不在于是否真的和实际情况相符,但是要体现出各种可能性。 <?xml version="1.0" encoding="utf-8" ?> <accessValidator redirectLocation="http://www.baidu.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mywebsite.com/Website"> <validator name="ReferrerValidator" type="ResourceService.Core.Validator.UrlReferrerValidator"> <!– ReferrerValidator使用的参数,不同的地址请用|间隔,例如localhost|127.0.0.1 –> <param key="UrlReferrer" value="localhost,*.0.0.1"/> </validator> <validator name="HttpMethodValidator" type="ResourceService.Core.Validator.HttpMethodValidator"> <!– HttpMethodValidator使用的参数,不同的地址请用,间隔,例如HEAD,GET –> <param key="HttpMethod" value="HEAD,GET"/> <param key="param1" value="param2"/> </validator> </accessValidator> 【第二步】 既然用Asp.net,IDE应该是Visual …

继续阅读 »

1,524 查看

ASP.NET中一些常用第三方DLL

c5.dll——一个C#和其他CLI语言的泛型集合类。.Net2.0及以上才可以使用。简介地址:http://www.itu.dk/research/c5/ com.yeepay.dll——易宝支付接口的DLL文件 Common.Logging.dll——由http://netcommon.sourceforge.net/提供的一套基础类库,提供一些通用方法 Facebook.dll,Facebook.Web.dll,Facebook.Web.Mvc.dll——这三个均为facebook提供的.net SDK,具体网址详见http://facebooksdk.codeplex.com,不同的后缀代表适用于不同的.net framework版本。 Enyim.Caching.dll——Enyim缓存,是一个用C#写的memcached的.net客户端库,具体地址:https://github.com/enyim/EnyimMemcached ICSharpCode.SharpZipLib.dll——一个用c#写的Zip, GZip, Tar and BZip2库,支持多个.net版本,地址见:http://www.icsharpcode.net/opensource/sharpziplib/ Iesi.Collections.dll——一个第三方的用于提供集合操作的类库(集合中的元素与或等的操作),项目地址:http://www.codeproject.com/Articles/3190/Add-Support-for-quot-Set-quot-Collections-to-NET,使用参考教程:http://blog.csdn.net/mydriverc/article/details/2254895 log4net.dll——由Apache发起的一个日志库,是一个用于数据日志到不同数据目标的工具。项目地址:http://logging.apache.org/log4net/ Lucene.Net.dll——用c#编写的Lucene的.net客户端库 Moxiecode.TinyMCE.dll——用.net封装的tinyMCE库。不过,目前已经不更新了,比较老。项目地址:http://sourceforge.net/projects/tinymce/files/TinyMCE%20.NET%20Package/ 应用教程:http://world.episerver.com/Code/Magnus-Ellinge1/TinyMCE-spellchecker/    MySql.Data.dll——一个针对MySQL的ADO.NET驱动。项目地址:http://dev.mysql.com/downloads/connector/net/1.0.html Newtonsoft.Json.dll——很出名的.net中用于处理Json的库。项目地址:http://json.codeplex.com/ NHibernate.dll——一个很出名的开源的对象关系映射器。项目地址:http://www.nhibernate.com/ RSS.NET.dll——一个开源的.net类库,用于RSS订阅,项目地址:http://www.rssdotnet.com/ Quartz.dll——一个拥有DirectShow函数的类库,是DirectX的一部分。

597 查看

.net托管代码和非托管代码的精要理解

托管代码:managed code 非托管代码:unmanaged code 在这里要理解一点,所有的代码都在.net framework里面,其中的代码本身没有托管不托管的概念。 直到,引入了CLR(Common Language Runtime)后,才有了托管或不托管的概念。 引入CLR的原因:编写C或C++时,我们都知道,需要对数组的边界要由考虑,否则会出现数组溢出的情况。这个问题,只是在软件开发中遇到的众多程序问题中的一个,其他的还有诸如没有正常释放等。为了能提高开发的效率,也提高程序的可靠性。那么就只有牺牲一部分的性能,来提出一个可以统一管理或监控的中间程序,该程序就是CLR。在这里微软也为这个CLR提供了一种语言,叫IL(中间语言),这个语言的提出最大的考虑是为程序提供更好的跨平台性。CLR在这里的作用,正如它的角色,主要负责垃圾收集,版本控制,线程管理等。这就构成了完整的.Net。   有了以上基础,托管和不托管也就明晰了,托管指的是把.net framework中的代码交给了CLR代为管理。非托管就是指没有交给CLR管理的那部分。 下面列举一些常用的非托管资源:AppliactionContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader,Pen,Regex,Socket,StreamWriter,StreamReader,Timer,Tooltip等。   垃圾回收时自动运行的,但是有的时候垃圾回收无法及时或者全部删除过期数据。同时垃圾回收机制对于非托管代码也是无能为力的。 针对这种情况,我们有两个途径去手动完成“垃圾清理”工作: 1、声明一个析构函数,作为类的一个成员 这个方法是不推荐的,但是一般会作为一种安全保险的机制被引入,即用了方法2,然后再使用此方法确保一下。我们可以再析构函数中执行释放资源的工作,但是这么做事有局限的。由于垃圾回收器的运行规则导致了我们不能在析构函数中放置在特定时刻运行的代码(比如像要提前释放,不想等到快结束的时候释放)。但是如果对象占用了宝贵而重要的资源,就应该尽快释放,此时我们就引入了IDisposable接口 2、在类中实现System.IDisposable接口 该方法是推荐的。IDisposable接口有一个Dispose()方法,该方法用于显示释放由对象直接使用的所有未托管资源。与该Dispose()方法可以配合使用的是using,using确定了一个程序作用域,当超出该域时,Dispose()会被自动调用(注意不是Close())。如果在IL语言级别看生成的代码与try块一样。   using(ResourceGobbler instance=new ResourceGobbler()) { //…….Code } 与 try { ResourceGobbler instance=new ResourceGobbler() //……Code } finally { instance.Dispose(); } …

继续阅读 »

725 查看

ado.net entity framework容易忽视的一个小问题

如果把数据库导成ado.net entity framework单独作为类库时候,需要注意,其中app.config中会自动设置connectstring,这个connectstring需要同样出现在调用这个模型的项目中的config文件里面。 否则,会有错误提示。 其实这个很容易理解,这个和.net的架构有关。.net往往是一个website,然后,其他的类库等都是以dll的形式被引用的。所以,此时如果在该dll里面用到configuration的是话,指的是当前的website的configuration。这个也同样适用于unitest项目。

502 查看

DinnerNow.Net中的AJAX应用体味(3)

现在再让我们言归正传,再来看看Search.aspx文件的所有代码,由于此代码很长,我仍然采取直接利用注释说明的方法进行讲解。   Code<%@ Page Language="C#" MasterPageFile="Main.master" AutoEventWireup="true" Inherits="Search"   2    Title="DinnerNow.net" CodeBehind="Search.aspx.cs" %>   3<%@ Register Src="LoginControl.ascx" TagName="LoginControl" TagPrefix="uc2" %>   4<%@ Register Src="SearchBar.ascx" TagName="SearchBar" TagPrefix="uc1" %>   5<asp:Content ID="Content1" ContentPlaceHolderID="LoginPlaceHolder" runat="Server">   6    <uc2:LoginControl ID="LoginControl1" runat="server"></uc2:LoginControl>   7</asp:Content>   8<asp:Content ID="SearchBarContent" ContentPlaceHolderID="SearchBarPlaceHolder" runat="Server">   9    <uc1:SearchBar ID="SearchBar1" runat="server"></uc1:SearchBar>  10</asp:Content>  11<asp:Content ID="Content3" ContentPlaceHolderID="MainContentPlaceHolder" runat="Server">  12<!—对于这个已经是第二次看到了,为调用WCF服务做准备–>      13<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">  14        <Services>  15            <asp:ServiceReference Path="~/Services/ShoppingCartService.svc" />  16        </Services>  17    </asp:ScriptManagerProxy>  18  19  20    <script type="text/javascript">  21        //这个函数是用来处理回传信息的,这个是asp.net ajax框架里面的pageload(),在页面加载的时候自动运行  22        function pageLoad()  23        {  24            try  25            {  26                var PARAMETERS = {};  27                //这是一种在JavaScript语言中定义函数的方法,函数名就是PARMETERS.load,在下面有调用,这里不运行  28                PARAMETERS.load = function() {  29                    PARAMETERS.map = {};  30                    //下面的程序提取了请求的url地址,并且利用JavaScript中的replace方法,按照正则表达式进行操作。  31                    //对于这个命令,我也没有搞得十分明白,期待大牛能不吝赐教,我只是在FireBug中进行调试得到了他的运行规律,  32                    //这个程序中会一连运行四次,就好像加了个循环,运行的对象分别是PostalCode,MenuType等等,就是设置的那四个搜索  33//对应的s、k、q、v数值分别为,以PostalCode为例,s=”PostalCode=98101&”,k=”PostalCode”,q=”=98101”,v=”98101”,以此类推  34//其他的,只是将这里的PostalCode换成如MenuType等等  35window.location.search.substring(1).replace(/([^&=]+)([=]([^&]*))?(&|$)/g,function(s,k,q,v){  36                        if (undefined === PARAMETERS.map[k]) {  37                            PARAMETERS.map[k] = [];  38                        } …

继续阅读 »

505 查看

DinnerNow.Net中的AJAX应用体味(2)

继续上一篇,接下来让我们看一下,DinnerNow的search.aspx文件的源代码   Code<%@ Page Language="C#" MasterPageFile="Main.master" AutoEventWireup="true" Inherits="Search"   2    Title="DinnerNow.net" CodeBehind="Search.aspx.cs" %>   3<%@ Register Src="LoginControl.ascx" TagName="LoginControl" TagPrefix="uc2" %>   4<%@ Register Src="SearchBar.ascx" TagName="SearchBar" TagPrefix="uc1" %>   5<asp:Content ID="Content1" ContentPlaceHolderID="LoginPlaceHolder" runat="Server">   6    <uc2:LoginControl ID="LoginControl1" runat="server"></uc2:LoginControl>   7</asp:Content>   8<asp:Content ID="SearchBarContent" ContentPlaceHolderID="SearchBarPlaceHolder" runat="Server">   9    <uc1:SearchBar ID="SearchBar1" runat="server"></uc1:SearchBar>  10</asp:Content>  11<asp:Content ID="Content3" ContentPlaceHolderID="MainContentPlaceHolder" runat="Server">  12    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">  13        <Services>  14            <asp:ServiceReference Path="~/Services/ShoppingCartService.svc" />  15        </Services>  16    </asp:ScriptManagerProxy>  17  18  19    <script type="text/javascript">  20        //这个函数是用来处理回传信息的,这个是asp.net ajax框架里面的pageload(),在页面加载的时候自动运行  21        function pageLoad()  22        {  23            try  24            {  25                //定义一个对象  26                var PARAMETERS = {};  27                //这是一种在JavaScript语言中定义函数的方法,函数名就是PARMETERS.load,在下面有调用,这里不运行  28                PARAMETERS.load = function() {  29                    PARAMETERS.map = {};  30                    //这里表示提出请求的url地址,并且按照正则表达式将url进行替换,从形式上看,应该只是把传参的标记等等替换点,  31                    //把前面正则表达式获取的值作为参数传给后面的function中的参数,这里有很强的对应关系,是根据searchbar.ascx里面的程序对应的  32                    //[^&=],表示匹配除&=之外的任何字符  33                    window.location.search.substring(1).replace(/([^&=]+)([=]([^&]*))?(&|$)/g,function(s,k,q,v){  34                        if (undefined === PARAMETERS.map[k]) {  35                            PARAMETERS.map[k] = [];  36                        }  37                        PARAMETERS.map[k].push(decodeURIComponent(v));  38                    }); …

继续阅读 »

509 查看

DinnerNow.Net中的AJAX应用体味(1)

DinnerNow是微软的一个demo,其集成了WPF,WCF,WF,WCS,同时对于数据库的操作又用了Linq,外加极强的用户体验,也将AJAX应用发挥到了一定的高度。虽然的确有点大杂烩之嫌,但是值得学习的地方还是很多的。在篇博文中,我主要会分析一下DinnerNow中的AJAX应用。 对于一些基本的DinnerNow安装,极其一些大致的框架结构等,已经有前人介绍过了(地址http://www.cnblogs.com/daizhj/category/136637.html) 。这里我主要针对一些主要的页面进行一下AJAX应用分析。 在DinnerNow最主要的页面应该是Search.aspx页面,在这个页面中完成了,搜索,点餐等等功能。下面是其实际的操作演示截图: 刚进入搜索页,选择餐厅的页面  选择了餐厅后出现的页面  当把鼠标放到图标上,触发特定的hover时候的样式  进行选择在左边生成了购物单。 这些过程都发生在同一个页面中,期间没有发生过任何页面跳转,神奇吧(可能是我太落伍,至少我刚看到觉得太强了。。- -),感觉上非常爽! 仔细分析其代码,不难发现其实其主要使用了大量AJAX应用,而在这里微软也不忘体现下新的WCF框架,利用WCF,构建了一个又一个的AJAX应用,然后再利用回传得到的数据,用JavaScript代码“画”出了现在的各种显示界面。 似乎有点困倦了,在下一篇中,会进行更加细致的页面代码分析。在进行之前,如果感兴趣的朋友,希望能先本地模拟下DinnerNow这个项目。因为在DinnerNow项目中,由于AJAX的大量应用,页面的代码量还是比较大的,如果对功能没有较好的把握的话,很容易混淆功能的。 今天先到这里了,对不住大家,太困了。。。。

3,688 查看

asp.net中生命周期的浅析

由于,一直对asp.net中生命周期的问题困惑,所以就特地去学习了下生命周期。 生命周期我觉得主要能分成一下几个阶段,按照发生的时间顺序 1、初始化页面框架 这个过程触发page.Init事件,这个是在各种事件被触发时都会运行的。不过需要注意的是,正如他的名字那样,这个时候是对页面框架的初始化,所以是无法进行UI行为的。 2、应用程序代码初始化 这个过程对应的事件是Page_Load,在这个事件中asp.net是会判断页面是回发还是首次加载的。不过,尽管如此Page_Load在各种事件被触发时都会运行的。所以,可以通过IsPostBack来进行写辅助操作。 3、执行事件处理 如果是首次加载则会不运行用户触发的事件,如Click事件等。则是直接执行Page_PreRender事件。此时整个过程主要事件顺序为Page_Init-Page_Load-Page_PreRender 但是,如果是用户触发了事件,如发生了Click操作,则整个过程将会变成 Page_Init-Page_Load-Click事件-Page_PreRender  当然除了这三个过程还有其他的过程,我为了能使得生命周期看起来更简单,所以省去了一些个人感觉不十分重要的过程。 那么这三个过程对我们来说有什么作用呢? 首先知道了 Page_Init-Page_Load-Page_PreRender三者的执行顺序和执行性质,那么我们就能根据这个顺序,去初始化一些数据。比如对page_Init所属的类,我们可以利用Page_Init对其的一些字段进行初始化,而asp.net控件的初始化则可以放在Page_Load中,最后对于用户自定义的UI控件就需要在Page_PreRender中进行了。这样做的目的是,保证每一个在执行的时候,运行该控件的基础已经完备。

无觅相关文章插件,快速提升流量