预览模式: 普通 | 列表
该文章转载自网络大本营:http://www.pushad.com/Info/10377.Html

母板页是asp.Net 2.0中的一个非常强大的特性,但是它却不能提供一个实现最基础的针对搜索引擎优化的方法。如果你想你的web页被搜索引擎收录并提高排名,那么你就需要在每一个页都指定一个title和meta标记。本文将说明如何扩展你的asp.Net页,以使得在使用母板页的时候你可以直接在你内容页的@Page指令中指定你的meta标签的描述和meta标签的关键字


背景
当你要针对搜索引擎优化你的web页的时候,设置页的title标签和页的meta描述是其中最重要的因素之一。< title>和meta标签实际上是在每个页的HTML的<head>部分,下面出示一个Rhinoback online backup的例子。


<html Xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>
   Rhinoback Professional Secure Online Backup Services for Small and Medium Business - SMB
</title>
<meta name="description" content="Professional Online Backup Services.
      Rhinoback provides robust backup functionality at affordable prices. 
      Premium features, premium services, low prices.  Get the most for
      your money with Rhinoback!" />
<meta name="keywords" content="backup, online backup, secure backup, cheap backup,
      free backup, offsite backup,inte.Net backup, secure files, offsite data storage,
      privacy, security, features, low prices, premium service, remote backup" />
</head>
<body>
     <!-- page content -->
</body>
</html>

<title>标签的文本显示在浏览器的顶端。从下面的例子中可以看到<title>在IE中的显示


当你的页被搜索引擎收录的时候,meta描述的文本则在搜索引擎的列表中显示。下面的例子来自google。带下划线的标题的下面的文本就来自页的meta描述标签。如果没有meta描述标签,那你的页在搜索引擎的列表中将显示为你的页上的某一处的文本。指定你的每一个页的描述文本要比把这些事情交给搜索引擎做好的多。

查看更多...

分类:.Net | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 382

c#一些常用的正则表达式总结,应该有些用处,可以收藏起来慢慢看 (对所有语言通用)

注意写的时候要加上一个@哦,比如  Regex re = new Regex(@"www.crazycoder.cn", RegexOptions.IgnoreCase); 否则C#中的反斜杠要用转义字符来表示,比如使用\\代替\

只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
利用正则表达式限制网页表单里的文本框输入内容:

用 正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

查看更多...

分类:.Net | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 362

asp.net中使用窗体身份验证

代码下载:基于角色的窗体身份验证示例代码

经常看到一些网友,自己写一些代码,判断用户是否登录,判断用户权限,例如使用Session,Cookie等,实际上微软替我们做好这些事情了,我们要做的只是调用一下。节省出时间可以去www.svnhost.cn看看。

好了,废话不说,直接来代码吧!

第一步:设置web.config

查看更多...

分类:.Net | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 370

asp.net中利用ashx实现图片防盗链

盗链的危害我就不说了,网上有很多。

直接分析盗链原理:看下面用httpwatch截获的http发送的数据

GET /Img.ashx?img=svn_work.gif HTTP/1.1
Accept: */*
Referer: http://www.svnhost.cn/
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)
Host: www.svnhost.cn
Connection: Keep-Alive
 

该数据包表示请求http://www.svnhost.cn/Img.ashx?img=svn_work.gif文件。我们可以看到Referer表示上一页请求页面地址,也就是文件来源。Host表示当前请求的主机地址。

查看更多...

分类:.Net | 固定链接 | 评论: 1 | 引用: 0 | 查看次数: 531
--在读取DataList数据时如果数据源是DataSet和DataTable时可以用

  DataRowView view
= (DataRowView)e.Item.DataItem

--来获取控件数据。

--当数据源是DataReader时就不能这样用了(存储过程分页就是DataReader)

--应该改为

      System.Data.Common.DbDataRecord view
= (System.Data.Common.DbDataRecord)e.Item.DataItem;

分类:.Net | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 629

最近在开发一ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题。在网上搜了不少资料,最后终于解决了,采用了如下方法:
1、asp.net Session的实现
asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。

ASP.NETSession的状态保持方式

ASP.NET提供了Session对象,从而允许程序员识别、存储和处理同一个浏览器对象对服务器上某个特定网络应用程序的若干次请求的上下文信息。Session对应浏览器与服务器的同一次对话,在浏览器第一请求网络应用程序的某个页面时,服务器会触发Session_onStart事件;在对话超时或者被关闭的时候会触发Session_onEnd 事件。程序员可以在代码中响应这两个事件来处理与同一次对话相关的任务,如开辟和释放该次对话要使用的资源等。


ASP.NET的程序中要使用Session对象时,必须确保页面的@page指令中EnableSessionState属性是True或者Readonly,并且在web.config文件中正确的设置了SessionState属性。

   ASP.NETSession的状态保持是由web.config文件中的<system.web>标记下的<sessionstate>标记的mode属性来决定的。该属性有四种可能的值:OffInprocStateServerSQlServer.

设为Off会禁用Session.

   Inproc是缺省的设置,这种模式和以前的ASP的会话状态的方法是类似的,会话的状态会被保存在ASP.NET进程中,它的优点是显而易见的:性能。进程内的数据访问自然会比夸进程的访问快。然而,这种方法Session的状态依赖于ASP.NET进程,当IIS进程崩溃或者正常重起启时,保存在进程中的状态将丢失。

为了克服Inproc模式的缺点,ASP.NET提供了两种进程外保持会话状态的方法。

   ASP.NET首先提供了提供了一个Windows服务:ASPState,这个服务启动后,ASP.NET应用程序可以将mode属性设置为“SateServer”,来使用这个Windows服务提供的状态管理方法。

除了在web.config文件中设置mode属性为StateServer外,还必须设置运行StateServer服务器的IP地址和端口号.如果IIS所在的机器运行StateServerIP地址就是127.0.0.1,端口号通常是42424.配置如下:

mode=”StateServer”

stateC


使用这种模式,会话状态的存储将不依赖IIS进程的失败或者重启,会话的状态将存储在StateServer进程的内存空间中。


另一种会话状态模式是SQLServer模式。这种模式是将会话的状态保存在SQL Server数据库中的。使用这种模式前,必须至少有一台SQL Server服务器,并在服务器中建立需要的表和存储过程。.NET SDK提供了两个脚本来简化这个工作:InstallSqlState.sqlUnInstallSqlState.sql。这两国文件存放在下面路径中:

   <%SYSTEMDRIVER%>\Winnt\Microsoft.NET\Framework\<%version%>\

要配置SQL Server 服务器,可以在命令行中运行SQL Server提供的命令行工具osql.exe

   osql -s [server name] -u [user] -p [password] <InstallSqlState.sql

例如:

   osql -s (local) -u as -p “”-i   InstallSqlState.sql

做好必要的数据库准备工作后,将web.config文件中的sessionstate元素的mode属性改为”sqlserver”,并指定SQL连接字符串。具体如下:

   mode="SQLServer"

sqlC

使用SQLServer模式处了可以使Session的状态不依赖于IIS服务器之外,还可以利用SQL Server的集群,使状态存储不依赖于单个的SQL Server,这样就可以为应用程序提供极大的可靠性。


2、丢失原因:
转(1):Asp.net 默认配置下,Session莫名丢失的原因及解决办法

正常操作情况下Session会无故丢失。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成60分钟,不会这么快就超时的。
这次到CSDN上搜了一下帖子,发现好多人在讨论这个问题,然后我又google了一下,发现微软网站上也有类似的内容。
现在我就把原因和解决办法写出来。
原因:
由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:
<sessionState
mode='InProc'
stateConnectionString='tcpip=127.0.0.1:42424'
sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes'
cookieless='true'
timeout='60'/>
我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProcStateServer?SQLServer(大小写敏感)。默认情况下是InProc,也就是将Session保存在进程内(IIS5aspnet_wp.exe,而IIS6W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。
[aspSession是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。]
哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:
1、配置文件中processModel标签的memoryLimit属性
2
Global.asax或者Web.config文件被更改
3
Bin文件夹中的Web程序(DLL)被修改
4
、杀毒软件扫描了一些.config文件。
更多的信息请参考PRB: Session variables are lost intermittently in ASP.NET applications
解决办法:

前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServerSQLServer。这两种存Session的方法都是进程外的,所以当aspnet_wp.exe重起的时候,不会影响到Session
现在请将mode设定为StateServerStateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定modeStateServer之后,请手工将该服务启动。这样,我们就能利用本机的StateService来存储Session了,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。
除此之外,我们还可以Session通过其他电脑的StateService来保存[如使用状态服务器]。具体的修改是这样的。同样还在sessionState标签中,有个stateConnectionString='tcpip=127.0.0.1:42424'属性,其中有个ip地址,默认为本机(127.0.0.1),你可以将其改成你所知的运行了StateService服务的电脑IP,这样就可以实现位于不同电脑上的Asp.net程序互通Session了。

如果你有更高的要求,需要在服务期重启时Session也不丢失,可以考虑将mode设定成SQLServer,同样需要修改sqlConnectionString属性。关于使用SQLServer保存Session的操作,请访问这里
在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如intstring等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。
如:
[Serializable]
public class MyClass
{
......
}
分类:.Net | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 424

DIV border边框显示不完全问题的解决方法

1.加个高度

2。加个背景颜色(推荐)

分类:Div+Css | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 522
1,不要在VS里直接复制ASPX文件,因为复制的时候,两个文件会使用同一个类文件,要复制的话,应该建空文件,然后复制页面和代码
2,发在项目完工的时候,要想得到一个干净的,仅有必需文件的项目,可以用复制项目的方法,注意的时,包含在项目的文档将会被编译及复制,没有包含的文档不会被复制,复制前,需要建立一个目标空站点,复制的方法应该选文件共享
3.VS.net中每一个文件的生成方法都有编译,内容,嵌入三种,对于CS文件,其生成方法应该为编译,对于ASPX文件,应该为内容,对于像想嵌入到DLL中的资源,如BMP图像,ICO图像,字符串等,应设为嵌入
其他文件,均设为内容
4.DATAREADER能解决的,请不要用DATASET
5.处理控件的分页,特别是DATAGIRD时,请尽量用自定义分页,然后自己写分页方法,不要用DATAGRID的自动分页功能,自动分页的性能不好
6.有时候,定义了一个WEB项目,在定义中,定义了其URL,如http://localhost:8001/,但是后来项目的URL可能发生了变化,成了http://localhost:8009,这个时候,直接打开项目可能不会成功,可以找到项目源文件所在文件夹,用记事本打开后缀为.webinfo的文件,修改其中的URL指向即可
7.在VS.NET中,添加窗体,必然会添加相应的CS类文件,有时候,希望直接在ASPX文件中以<%%>的古典形式来书写代码,这时,千万别直接删除CS类文件,应该先显示所有文件,然后,打开对应ASPX页面,将头部的<%@ PAGE%>指令中的CODEBEHIND以及inhert两项删除后再删除CS文件
8.CS1607: Assembly generation -- Referenced assembly 'Assembly Name' is a localized satellite assembly错误的处理
原因是由于Assembly.cs中一项属性:[assembly:AssemblyCultureAttribute("")]使用了不正确的值,正确的方法,是将其改为默认值此文出处在于:http://weblogs.asp.net/jgaylord/archive/2003/08/22/25003.aspx
9.用ASP.NET写WINDOWS事件日志的方法:(很多人在CSDN和MS的新闻组里问,我也问过,但无果,下面的方法是自己琢磨出来的)
a,打开注册表:HK_L_M\SYSTEM\CURRENTControlSet\Services\EventLog\application建立一个项
项名就是EVENTSOURCE的名称了(这一步,可以在做项目安装文件时做进安装步骤里,就不用手工操作了)
b,在代码中,使用EVENTLOG.WRITEENTRY来写日志就可以了
原因呢是ASP.NET的运行帐户没有权限来建立事件源,但是,却有权限来读写事件日志了
10,排除和包含项目:对于不想编译以后不想包含在最终版本里的文件,应该将其排除,被排除的文件将不会参与编译及项目复制,如果包含一个文件夹,将会包含其所有下级
11,默认下,ASPX不允许POST含有HTML的内容,将PAGE指令中加入ValidateRequest="false"即可

6,想要引用别人的控件,可以直接将DLL拷入BIN文件夹,然后在工具箱中点击添加删除工具,流览该文件,然后选中就可以放入工具箱了
7.对于HTML标签,想要将其变为服务器控件,可以选中并点击右键,选择在服务器端运行
8,编写客户端事件处理脚本需要对HTML标签或者客户端控件进行命名,然后在代码视图中,选择相应的控件名称及事件即可
9.WEB控件只要命名了,均可以在客户端脚本中以其标签来引用
10,常用的代码可以直接拖入工具箱中作为一个工具引用
11.要引用用户控件,可以直接拖动用户控件的ASCX文件至设计窗,VS会自动为你添加REGISTER标签
12,要防止别人反编译,可以用VS自带的代码混乱工具,将DLL添加,然后生成,生成的代码主要是对一些方法和类的名称混乱
13,要把连接串放入WEB.CONFIG,可以直接打开WEB.CONFIG文件,加入<appSettings>段,在其中加入<add key="dsn" value="..." />
引用的时候,先导入名称空间:system.configuration,使用configurationsettings.appSettings["dsn"]就可以引用了
14.非必要,不要用DataBinder.Eval,应该用((DataRowView)(Container.DataItem))["列名"]的方式来访问数据,但使用这种方法,必须在ASPX页面顶部加入<%@ Import Namespace="System.Data" %>

15.用户控件也可以定义属性和方法,但是,如果定义了属性的话,控件的显示部分,可能要用自定义的方法来完成,不能依赖于控件的PAGE_LOAD事件来处理,因为对于PAGE_LOAD来说,这些自定义的属性尚不可见

分类:.Net | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 369