【.NET】分类文章列表

ASP.NET中防止页面多次提交的代码实现

此处提供的代码用来实现当asp.net页面中的某个Button被点击后disable掉该页面中所有的Button,从而防止提交延时导致 的多次提交。基于之前的onceclickbutton脚本.
//ASP.NET中防止页面多次提交的代码:javascript< script language=”javascript”> < !– function disableOtherSubmit() {
var obj = event.srcElement;
var objs = document.getElementsByTagName(‘INPUT’);
for(var i=0; i< objs.length; i++)
{
if(objs[i].type.toLowerCase() == ’submit’)
{
objs[i].disabled = true;
}
}
} //–> < /script>//ASP.NET中防止页面多次提交的代码:asp.netpublic class PreventMultiClick : System.Web.UI.Page {
protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.LinkButton LinkButton1; protected System.Web.UI.WebControls.Button Button3; private void Page_Load(object sender, [...]

日期:2010年03月13日 | 分类:.NET, ASP

.NET 4各项技术的应用前景

Visual Studio 2010和.NET 4的发布,显然将成为今年微软开发技术领域最值得关注的大事之一。那么,微软的最新开发技术前景如何呢?
近日金旭亮老师在CSDN博客中发表了一篇《抛砖引玉:我看微软.NET各子技术领域之应用前景》,对.NET领域内各项技术,包括Windows Form和WPF、数据存取技术、Web开发技术、云计算等应用前景发表了自己的看法。
原文中提到:

桌面应用程序开发技术( Windows Form和WPF):Windows Form的问题是千人一面,.NET 4中,WPF在性能上有较大的改进,这点在使用WPF开发的Visual Studio 2010上体现极为明显。我认为,WPF取代Windows Form是必然的。
数据存取技术:在实际开发中还是使用ADO.NET实体框架更合适。LINQ to SQL有的功能它都有,而且用起来更为灵活,难得的是它的使用并不比LINQ to SQL复杂多少。ADO.NET实体框架还延伸到了其它的技术领域,是一项重要的基础数据存取技术。因此, ADO.NET实体框架 vs LINQ to SQL,前者胜出。
Web开发技术:在现有.NET Web开发技术应用现状之下,任何一个与现有的ASP.NET网站(以Web Form+AJAX为主体技术)集成麻烦的技术,都很难有美好的前途。Silverlight实际上是另一种Web应用架构的代表技术,其立足点在于充分利用客户端的计算资源,可以大大地降低对服务端的依赖,而且易于构造良好的用户体验,我个人认为其发展大有可观。是一个需要重点关注的技术。
插件技术:MEF推出,MAF(Managed Add-in Framework )会无疾而终。
WCF和.NET Remoting:有了WCF,我还要Remoting干什么?因为前者包容后者的所有功能,而且还提供了更多。我们可以看到WCF向其它领域的渗透,比如前面的WCF Data Service,还有Workflow Service(将工作流发布为WCF服务),看来微软是将宝押在WCF上了,凡是带有服务字样的,微软都有把它改造为WCF服务的冲动。
工作流:这个技术,我看是微软自己把事弄砸了。新版本和老版本差别太大。
函数式编程语言F#:我个人觉得,F#如果用于开发多线程并行计算程序,会有较高的开发效率,而函数式编程的特点,也会使它在科学计算中有较好的表现。但用于开发CRUD之类的MIS系统,至少目前还是免谈吧。
云计算:虽然我个人认可云计算是一个大的发展方向,但对于中国,这个技术是一道远方的亮丽风景,仅供观赏。因为国内还没有一个成熟的云计算平台,而微软的Azure目前又没有开放中国大陆的云计算购买服务,加上中国又有特殊的国情,所以一切都只是空中楼阁。云计算真正应用于国内,诸位请继续等待吧。了解Azure的最佳方法是看DAVID CHAPPELL的文章《Introducing Windows Azure》。
而CSDN网友阿彤则在自己的博客中对微软的技术发展路线提出了很多批评,他认为.NET设计思路很乱,是一个失败的产品,一个失败的平台。.NET可以快速做一些临时性的应用,可以快速做一些小应用。但要是去做一些大型的应用,前期很爽,后期就会痛苦不堪。永远都别指望能用.NET去开发出极致化的产品。
你的看法呢?欢迎讨论。
【特别提示】
CSDN从微软公司得到的确认,.NET框架新版本的正式名称中,版本号应该是4而不是4.0,因此我们应该说.NET 4和ASP.NET 4。请大家在交流中、撰写文章和图书时注意保持一致。

日期:2010年03月04日 | 分类:.NET

请解释一下webService? 如何用.net实现webService

webService可以描述为可以在 Web 上部署并可以被任何应用程序或其他服务调用的功能它可以是商业应用功能,也可以是系统功能,webService使用了SOAP这个所有主要供应商都支持的新标准协议,SOAP 使用 HTTP 在网络上进行通信或传递信息,使用 XML 定义数据能力
在.net中webService实现步骤:
1. 创建一个webService,生成相应的.asmx文件。
2. 添加一个通过 Internet 公开和调用的方法。此类方法又称为 [WebMethod]
3. 部署创建好的webService
4. 在将要调用webService的项目中添加web引用,生成相应的代理类。
5. 实例化代理类对象
6. 通过代理类对象调用相应的WebMethod

日期:2010年02月23日 | 分类:.NET

.net面试题

1.1.1 Visual Studio.NET 有几个集成开发环境?
○ A.一个 ○ B.两个 ○ C.三个 ○ D.四个
1.1.2 我们称.NET编程架构是什么?
○ A..NET Framework ○ B.VS.NET ○ C.XML Web Service ○ D. 开发工具
1.1.3 以下那些标准是与Web Service相关的
○ A..SOAP ○ B. WSDL ○ C.UDDI ○ D. 以上都是
1.1.4 SOAP标准是谁来制定的?
○ A. Microsoft ○ B. W3C ○ C.IBM ○ D. SUN
1.1.5 Visual Studio.NET 会支持多少种开发语言?
○ A. 两种 ○ [...]

日期:2010年02月23日 | 分类:.NET

用Asp+XmlHttp实现RssReader功能

<style>
body {margin:10px;background-color:#ffffff;margin-top:6px;}
form{margin:0px;}
* {font:12px tahoma;line-height:140%;color:#000000}
.title {font-weight:bold;color:red;}
.time {font:10px;color:#999999;}
a {text-decoration:none;color:blue;}
</style>
<script type=”text/javascript”>
var switcher=0;
</script>
<body ondblclick=”if(switcher==0){document.styleSheets[0].addRule(‘div’,’display:none’);switcher=1}else{document.styleSheets[0].addRule(‘div’,’display:block’);switcher=0}”>
<form name=”rssform” method=post action=””>
RSS资源:<INPUT TYPE=”text” NAME=”RssFeed” size=60 style=”height:22px” value=”<%=request(“RssFeed”)%>” onfocus=select()> <input type=”submit” value=”Read It”> &nbsp;&nbsp;双击鼠标可以关闭摘要,只显示标题
</form>
<hr/>
<%
If(request(“RssFeed”)=””) Then
url=”/rss2.asp”
else
url=request(“RssFeed”)
End If
Set xml = Server.CreateObject(“Microsoft.XMLHTTP”)
xml.Open ”GET”, url, False
xml.Send
Set xmlDom = server.createObject(“microsoft.xmldom”)
xmlDom.async=False
xmlDom.ValidateOnParse=false
xmlDom.load(xml.responseXML)
if xmlDom.ReadyState>2 Then
set oItem=xmlDom.getElementsByTagName(“item”)
for i=0 to oItem.length-1
response.write ”<span style=’font:bold 9px verdana;color:#000000′>”&i+1&”</span>. <a class=’title’ href=’”&oItem(i).childNodes(1).text&”‘ target=’_blank’>”&oItem(i).childNodes(0).text&”</a> <span class=’time’>["&oItem(i).childNodes(3).text&"]<br />”
response.write ”<div>摘要:”&oItem(i).childNodes(4).text&”</div><br>”
next
end if
%>

日期:2010年02月01日 | 分类:.NET, ASP

ASP.NET4.0的新功能 SEO 增强

  ASP.NET4.0提供了一系列新的特性实现网站的 SEO优化,包括:
  Page类的新属性:Page.MetaKeywords 和 Page.MetaDescription;
  ASP.NET Web Forms 新的URL路由功能;
  Response.RedirectPermanent()、Response.RedirectToRoutePermanent()方法等。
  Page.MetaKeywords 和 Page.MetaDescription属性将生成 html 标记中的 和 ,例如
  C# 代码
  Page.MetaDescription = “ASP.NET 4.0学习站点:http://dotnet.aspx.cc/”;
  Page.MetaKeywords = “孟宪会”;
  将生成如下的代码:
  HTML 代码
  Response.RedirectPermanent()将进行HTTP 301(Moved Permanently)重定向。

日期:2010年01月27日 | 分类:.NET, ASP

基于.net平台的web框架搭建

  最近基于ExtJs和asp.net mvc做了一个系统.来总结下.一起讨论下.
  一.技术分析
  1.web数据传输
  ExtJS作为前端UI展现层,传输数据格式为json或者xml,一般大部分为json.
  2.asp.net mvc
  (不要考虑太多mvc其他特性,controller+method就够了)的和路由url很好的符合了这一要求,实现起来很轻松.
  3.选一款依赖注入容器
  只要你好好学过一款Ioc组件,概念都还是一样的,做法不同而已,我选的是微软的Unity,
  这里我并没有把Service配置在xml中,根据我的理解,大部分软件并不需要这么灵活,我就纯注册就够了(其实往往是这样,我们可以问问自己,我们用到了多少功能).因为大部分都是注册一次,永不修改的…真的有必要的时候可以提出
  Ioc组件很多,个人认为比较强大的还是spring.net,功能非常丰富,还有AOP功能,最主要的是其可以和其他组件结合的很好.
  容器作为底层服务,主要就是为我们提供灵活性.想办法与现有组件结合,注册相关服务.
  4.数据库操作(NHibernate)
  3年前我会选ADO.NET
  2年前我选Microsoft.Practices.Data.Application
  1年前我选linq to sql
  现在我选nhibernate
  关于NHibernate映射
  (1)若你是初学者,乖乖的自己手动配吧
  (2)若你喜欢linq的,有一款FluentNHibernate可供选择(用新技术请考虑风险,玩的没关系)
  (3)若你映射配置文件玩的很熟悉了,就用NHibernate.Mapping.Attributes挂标签自动生成吧(不推荐用什么代码生成器,都是要重新改的)
  5.比较java web经典平台
  比较庆幸,之前有接触过java,java的web编程架构很稳定,3年前如此,现在还是一样,不同的只是版本升级而已,这点.net程序员比较惨的.这也见证了spring,hibernate,struts(webwork)在目前而言是最好的拍档.
  换成.net平台也就是spring.net(Ioc容器)+nhibernate(orm)+asp.net mvc
  spring.net和nhibernate都属于java移植产品,所以应该来说资料是非常的多,想学习的人,应该把眼光放到java社区中,收获会很多的,稍微比较下c#和java语言就好了(千万别学了就跑去学java了:)).
  asp.net mvc对比struts而言,方便了很多,但不同的是java附产品比较多,像asp.net mvc这样的框架,java也有些框架已经开始改进了(看到过,基本上理念是一样的).
  当然这里均采用的开源路线,大家也可以采用微软自家平台的技术.
  二.技术串联
  1.注册容器
  2.初始化Nhibernate
  我们都知道Ioc是可以与asp.net mvc结合的
  3.Nhibernate与容器配合法
  (1)Nhibernate与spring.net的结合,这里已经有经典例子在了,何谓经典例子,就是大家都这么干,而且也没出什么问题,我也就这么干,确实有点道理的…虽然有时候真不懂为什么这么干。。。呵呵
  (2)用单例的方式在应用启动时注册,如上法
  (3)Nhibernate若映射换FluentNHibernate的话,或者加入linq to nh,则整个设计就要重新考虑了
  我想上面的设计有点意思,特别是加入了linq to nh我的设想是这样的
  (1)简单查询用linq to nh
  (2)hql主打,标准查询辅助…
  (3)若由于对nh框架不熟,导致查不出来,或者遇到速度慢,先上t-sql(原因一般都是自身学的不好造成的,先怀疑自己,怀疑不下去了再去怀疑框架本身…)
  三.项目细分
  这里忽略分布式应用,我没具体搞过…
  Entity项目一个
  Service接口项目一个
  Service接口默认实现项目一个
  Domain项目一个
  主体辅助类项目一个(放杂七杂八用的)
  测试项目一个(可选)
  web相关项目一个(放与web相关的和controller)
  web主打项目一个(运行项目,主放js用…)
  基本上最基本的就是这样,你可以细分,也可以把上面很多项目合并为同一项目.
  若想灵活就多用反射与配置文件
  四.细化
  若要完成一般的数据增删改系统的话,我们还可以稍微细化封装,这样的封装是很方便的.
  1.没有绝对的灵活,需要一定的耦合,ext框架对于后端请求的json数据有一定要求,所以数据转换在所难免,所以准备一些通用的数据类型转换的功能
  2.对于千篇一律的数据增删改,若无特殊的业务逻辑,可考虑借助asp.net mvc和反射功能完成,这样一个controller的设计可以代替很多个.
  3.在传json时勿使用延迟加载等特性.
  4.一个hql配置系统,不要因为某一查询条件改了而重新编写代码,可以考虑做个机制,把hql语句提取出来
  5.巧用nhibernate拦截机制,日志必不可少
  6.一套稳定的权限机制
  7.对于ext,要有一套js加载机制
  总结起来细化的都是对于不同需求而变化设计的.
  如果不是很难的项目,花一段时间实践,这种搭配很容易学会.
  接下来重点还是回到.net framework来学习.

日期:2010年01月27日 | 分类:.NET, ASP

如何在ASP.Net 中把图片存入数据库

介绍
   可能有很多的时候,我们急需把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在文件系统中。
  在这篇文章中,我们将讨论怎样把图片存入到Sql2000当中。
  在这篇文章中我们可以学到以下几个方面的知识:
1.     插入图片的必要条件
2.     使用流对象
  3. 查找准备上传的图片的大小和类型
4.怎么使用InputStream方法?
插入图片的必要条件
在我们开始上传之前,有两件重要的事我们需要做:
#Form 标记的 enctype 属性应该设置成 enctype=”multipart/form-data”
# 需要一个<input type=file>表单来使用户选择他们要上传的文件,同时我们需要导入 System.IO名称空间来处理流对象
把以上三点应用到aspx页面。同时我们需要对SqlServer做以下的准备。
# 需要至少含有一个图片类型的字段的表
# 如果我们还有另外一个变字符类型的字段来存储图片类型,那样会更好一些。
现在,我们准备了一个Sql表(包含了一个image数据类型的字段),还有<input type=file>标记。当然我们还得准备Submit按钮,以便用户在选择了图片以后提交。在这个按钮的Onclick事件里,我们需要读取选取图片的内容,然后把它存入到表里。那我们先来看看这个Onclick事件。
提交按钮的Onclick事件的代码:
Dim intImageSize As Int64
     Dim strImageType As String
     Dim ImageStream As Stream
    ’ Gets the Size of the Image
    intImageSize = PersonImage.PostedFile.ContentLength
    ’ Gets the Image Type
    strImageType = PersonImage.PostedFile.ContentType
    ’ Reads the Image
    ImageStream = PersonImage.PostedFile.InputStream
    Dim ImageContent(intImageSize) As Byte
    Dim intStatus As Integer
    intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
    ’ Create Instance of Connection [...]

日期:2010年01月26日 | 分类:.NET

认识ASP.NET配置文件Web.config

一、认识Web.config文件
  Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的
Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
  在运行时对Web.config文件的修改不需要重启服务就可以生效(注:<processModel> 节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。
  二、web.config配置文件(默认的配置设置)以下所有的代码都应该位于
<configuration>
<system.web>
  和
</system.web>
</configuration>
  之间,出于学习的目的下面的示例都省略了这段XML标记
  1、<authentication> 节
  作用:配置 ASP.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。<authentication> 元素必需与<authorization> 节配合使用。
  示例:
  以下示例为基于窗体(Forms)的身份验证配置站点,当没有登陆的用户访问需要身份验证的网页,网页自动跳转到登陆网页。
<authentication mode=”Forms” >
<forms loginUrl=”logon.aspx” name=”.FormsAuthCookie”/>
</authentication>
  其中元素loginUrl表示登陆网页的名称,name表示Cookie名称
  2、<authorization> 节
  作用:控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必需与<authentication> 节配合使用。
  示例:以下示例禁止匿名用户的访问
<authorization>
 <deny users=”?”/>
</authorization>
  注:你可以使用user.identity.name来获取已经过验证的当前的用户名;可以使用
web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的实例请参考:
  Forms验证 http://www.fanvb.net/websample/dataauth.aspx
  3、<compilation>节
  作用:配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为True(Web.config文件中有详细说明,此处省略示例)
  4、<customErrors>
  作用:为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。
  示例:当发生错误时,将网页跳转到自定义的错误页面。
<customErrors defaultRedirect=”ErrorPage.aspx” mode=”RemoteOnly”>
</customErrors>
  其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示:对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。
  5、<httpRuntime>节
  作用:配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
  示例:控制用户上传文件最大为4M,最长时间为60秒,最多请求数为100
<httpRuntime maxRequestLength=”4096″ executionTimeout=”60″ appRequestQueueLimit=”100″/>
  6、 <pages>
  作用:标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。<pages>可以在计算机、站点、应用程序和子目录级别声明。
  示例:不检测用户在浏览器输入的内容中是否存在潜在的危险数据(注:该项默认是检测,如果你使用了不检测,一要对用户的输入进行编码或验证),在从客户端回发页时将检查加密的视图状态,以验证视图状态是否已在客户端被篡改。(注:该项默认是不验证)
<pages buffer=”true” enableViewStateMac=”true” validateRequest=”false”/>
  7、<sessionState>
  作用:为当前应用程序配置会话状态设置(如设置是否启用会话状态,会话状态保存位置)。
  示例:
<sessionState mode=”InProc” cookieless=”true” timeout=”20″/>
</sessionState>
  注:
  mode=”InProc”表示:在本地储存会话状态(你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态)
  cookieless=”true”表示:如果用户浏览器不支持Cookie时启用会话状态(默认为False)
  timeout=”20″表示:会话可以处于空闲状态的分钟数
  8、<trace>
  作用:配置 ASP.NET 跟踪服务,主要用来程序测试判断哪里出错。
  示例:以下为Web.config中的默认配置:
<trace enabled=”false” requestLimit=”10″ pageOutput=”false” traceMode=”SortByTime” localOnly=”true” />
  注:
  enabled=”false”表示不启用跟踪;requestLimit=”10″表示指定在服务器上存储的跟踪请求的数目
  pageOutput=”false”表示只能通过跟踪实用工具访问跟踪输出;
  traceMode=”SortByTime”表示以处理跟踪的顺序来显示跟踪信息
  localOnly=”true” [...]

日期:2010年01月26日 | 分类:.NET

Asp.net中防止用户多次登录的方法

在web开发时,有的系统要求同一个用户在同一时间只能登录一次,也就是如果一个用户已经登录了,在退出之前如果再次登录的话需要报错。
常见的处理方法是,在用户登录时,判断此用户是否已经在Application中存在,如果存在就报错,不存在的话就加到Application中(Application是所有Session共有的,整个web应用程序唯一的一个对象):
string strUserId = txtUser.Text;
ArrayList list = Application.Get(“GLOBAL_USER_LIST”) as ArrayList;
if (list == null)
{
list = new ArrayList();
}
for (int i = 0; i < list.Count; i++)
{
if (strUserId == (list[i] as string))
{
//已经登录了,提示错误信息
lblError.Text = ”此用户已经登录”;
return;
}
}
list.Add(strUserId);
Application.Add(“GLOBAL_USER_LIST”, list);
当然这里使用Cache等保存也可以。
接下来就是要在用户退出的时候将此用户从Application中去除,我们可以在Global.asax的Session_End事件中处理:
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
string strUserId = Session["SESSION_USER"] as string;
ArrayList list = Application.Get(“GLOBAL_USER_LIST”) as ArrayList;
if (strUserId != null && list != null)
{
list.Remove(strUserId);
Application.Add(“GLOBAL_USER_LIST”, list);
}
}
这些都没有问题,有问题的就是当用户直接点浏览器右上角的关闭按钮时就有问题了。因为直接关闭的话,并不会立即触发Session过期事件,也就是关闭浏览器后再来登录就登不进去了。
这里有两种处理方式:
1、使用Javascript方式
在每一个页面中加入一段javascript代码:
function window.onbeforeunload()
{
if (event.clientX>document.body.clientWidth && event.clientY<0||event.altKey){
window.open(“logout.aspx”);
}
}
由于onbeforeunload方法在浏览器关闭、刷新、页面调转等情况下都会被执行,所以需要判断是点击了关闭按钮或是按下Alt+F4时才执行真正的关闭操作。
然后在logout.aspx的Page_Load中写和Session_End相同的方法,同时在logout.aspx中加入事件:onload=”javascript:window.close()”
但是这样还是有问题,javascript在不同的浏览器中可能有不同的行为,还有就是当通过文件->关闭时没有判断到。
2、使用xmlhttp方法(这种方法测试下来没有问题)
在每个页面中加入如下的javascript(这些javascript也可以写在共通里,每个页面引入就可以了)
var x=0;
function myRefresh()
{
var httpRequest = new ActiveXObject(“microsoft.xmlhttp”);
httpRequest.open(“GET”, ”test.aspx”, false);
httpRequest.send(null);
x++;
if(x<60) //60次,也就是Session真正的过期时间是30分钟
{
setTimeout(“myRefresh()”,30*1000); //30秒
}
}
myRefresh();
在web.config中设置
<sessionState mode=”InProc” timeout=”1″></sessionState>
test.aspx页面就是一个空页面,只不过需要在Page_Load中加入:
Response.Expires = -1;
保证不使用缓存,每次都能调用到这个页面。
原理就是:设置Session的过期时间是一分钟,然后在每个页面上定时每30秒连接一次测试页面,保持Session有效,总共连60次,也就是30分钟。如果30分钟后用户还没有操作,Session就会过期。当然,如果用户直接关闭浏览器,那么一分钟后Session也会过期。这样就可以满足要求了。

日期:2010年01月26日 | 分类:.NET

赞助商链接

广而告之

友情链接

关于站点 - 联系我们 - 网站大事 - 友情链接 - 免责声明 - 意见反馈 - 网站投稿 - 站点地图
版权所有开心编程网禁止转载! Copyright © 2009-2010 All Rights Reserved. Email:hbhgfzk@126.com