在套用母版页的页面中使用input type="file" 上传图片

如果Request.Files 始终是0,添加以下信息:

(1)在套用页面Page_Load中添加 Form.Enctype = "multipart/form-data";不要在母版页中加

(2)确保input type="file"包含 name属性,否则也取不到上传的文件。

posted @ 2011-09-17 12:06 zhwily 阅读(17) 评论(0) 编辑
       对Web应用程序来说,发生不可预知的错误和异常在所难免,我们必须为Web程序提供错误处理机制。当错误发生时,我们必须做好两件事情:一是将错误信息 记录日志,发邮件通知网站维护人员,方便技术人员对错误进行跟踪处理;二是以友好的方式提示最终用户页面发生了错误,而不能将未处理的错误信息显示给用 户。

  让我们想想,ASP.NET为我们提供了几种错误处理机制?如果同时使用他们是不是有一定的优先级?.NET提供了四种错误处理机制,它们有一定的优先级顺序:Page_Error事件>ErrorPage属性>Application_Error事件> <customErrors>配置项。下面分别介绍这四种错误处理机制的用法。

  1.Page_Error事件
  Page_Error 事件提供一种捕获在页级别出现的错误的方法。您可以只是显示错误信息(正如下面的示例代码所示),也可以记录事件或执行某个其他操作。
代码
 1   private void Page_Load(object sender, System.EventArgs e)
 2   {
 3   // Put user code to initialize the page here
 4   throw new Exception("Page Error!");
 5   }
 6 
 7   protected void Page_Error(object sender, EventArgs e) 
 8   {
 9   Exception objErr = Server.GetLastError().GetBaseException();
10   Response.Write("Error:" + objErr.Message);
11   Server.ClearError(); //同样要注意这句代码的使用
12 
13   }
14 

备注:此示例在浏览器中显示详细的错误信息,提供此示例只是为了进行说明。向应用程序的最终用户显示详细信息一定要小心。更适当的做法是向用户显示一条消 息,告知已发生错误,然后将具体的错误详细信息记录在日志中。

 

  2.ErrorPage属性
  你几乎可以在页面任何时候设置ErrorPage属性,从而确定页面发生错误的时候会重定向至哪个页面。要让ErrorPage属性能够发挥作 用,<customErrors>配置项中的mode属性必须设为"On"。
  this.ErrorPage = "~/ErrorHandling/PageError.html";
  如果Page_Error和ErrorPage都存在,当抛出Exception时,页面执行顺序是怎样的呢?页面会先执行Page_Error事件处理 函数,如果Page_Error()事件中调用函数Server.ClearError()清除异常信息,则不会跳转到ErrorPage属性指定页面; 如果没有调用Server.ClearError(),Exception信息会继续向上抛,页面会跳转到ErrorPage指定页面。这也就证明了优先 级顺序:Page_Error事件>ErrorPage属性。

  3.Application_Error事件
  与Page_Error 事件相类似,您可使用Application_Error事件捕获发生在应用程序中的错误。由于事件发生在整个应用程序范围内,因此您可记录应用程序的错 误信息或处理其他可能发生的应用程序级别的错误。在Global.asax文件中添加如下代码就OK了。
代码
 1 protected void Application_Error(object sender, EventArgs e)
 2   {
 3   Exception ex = Server.GetLastError().GetBaseException();
 4   //实际应用中这里可以将Exception信息记Log或是保存到数据库中
 5   //还可以将错误发邮件给网站维护人员
 6   Response.Write("Error:" + ex.Message);
 7   //清除Exception,避免继续传递给上一级处理
 8   //这里上级就是<CustomerErrors>配置节了
 9   Server.ClearError(); 
10   }

  4.<customErrors>配置项
  配置文件web.config中的<customErrors> 配置节,可将重定向页指定为默认的错误页defaultRedirect或者根据引发的 HTTP 错误代码指定特定页。如果发生在应用程序以前的任一级别都未捕获到的错误,则显示这个自定义页。
<customErrors mode="On" defaultRedirect="~/ErrorHandling/ApplicationError.html">
  <error statusCode="404" redirect="~/ErrorHandling/404.html" />
</customErrors>  
  同样,如果Application_Error和<customerErrors>同时存在,也存在执行顺序的问题。因为优先级 Application_Error事件> <customErrors>配置项,所以发生应用程序级错误时,优先执行Application_Error事件中的代码,如果 Application_Error事件中调用了Server.ClearError()函数,<customerErrors>配置节中的 defaultRedirect不起作用,因为Exception已经被清除;如果Application_Error事件中没用调用了 Server.ClearError()函数,错误页会重新定位到defaultRedict指定的URL页面,为用户显示友好出错信息。

  通过对.NET提供的以上四种错误处理机制的分析,我们可以把它们从不同的角度分类,便于我们理解和使用。
  1.从功能上分类:用于异常处理(Handling exceptions)是Page_Error事件和Application_Error事件;用户错误页面重定向(Redirecting the user to an error page)的是 ErrorPage属性 和 <customErrors>配置项。
  2.从错误处理的范围分类:用于页面级(Page level)错误处理的是Page_Error事件 和 ErrorPage属性;用于应用程序级(Application level)错误处理的是Application_Error事件 和 <customErrors>配置项。 

 请注意,<customErrors> 部分包括设置为 On 的 mode 属性。mode 属性用于控制错误重定向发生的方式。例如,如果您正开发应用程序,则很可能希望查看实际的 ASP.NET 错误信息,并且不希望被重定向到更用户友好的错误页。mode 属性包括以下设置:? On:未被处理的异常将用户重定向到指定的 defaultRedirect 页。此模式主要用于生产。 
? Off:用户收到异常信息而不是被重定向到 defaultRedirect 页。此模式主要用于开发。 
? RemoteOnly:只有在本地计算机上访问该站点的用户(通过使用 localhost)才能收到异常信息。所有其他用户都被重定向到 defaultRedirect 页。此模式主要用于调试。  
posted @ 2010-07-19 17:50 zhwily 阅读(98) 评论(0) 编辑

 

今天在博客园看到这篇文章“群发 “站内信”的实现”,(http://www.cnblogs.com/grenet/archive/2010/03/08/1680655.html)

我以前也做过类似的项目,但是当时才入行,做的一塌糊涂。

好在做的项目没出问题前,就下线了。

 

原作者在分析站内信的时候 ,已经很具体了;(可以先查看该篇文章分析,这里不详述)

“站内信”有两个基本功能。

一:点到点的消息传送。用户给用户发送站内信;管理员给用户发送站内信。

二:点到面的消息传送。管理员给用户(指定满足某一条 件的用户群)群发消息。

但是下面回复的时候,关于“已读”、“未读”、“删除”的问题没有很好的解决。

受23楼回复的启发(http://www.cnblogs.com/grenet/archive/2010/03/08/1680655.html#1775980)

我在这里扩展一下,可能存在错误,也可能不是最好的解决办法。

 

设计思想:这里发信息的时候不再考虑是管理员发信还是普通用户发信,而只考虑是不是群发信息,(接受人超过一个的视为群发信息)

      因为不管是谁发的,只要登录用户没有删除,那么都要在收件箱中保存。

      所以就分开设计点对点的信息和群发信息。      

 

数据库具体设计如下:

Message表:用于记录发信人的信息

  Id:编号;

  SendId:发信人Id;

  RecId:接受人Id;

  MessageId:信息Id;

  ReadTime:阅读时间;

  Statue:状态:是否已读;

MessageText表:用于记录发信内容

  Id:编号;

  Title:信息标题;

  Content:信息内容;

  CreateTime:发信时间;

GlobalMessage表:用于记录群发信息的收信人

  Id:编号;

  RecId:收信人(如果是站内所有用户则为0); 

ReadMessage表:用于记录用户对群发信息的操作

  Id:编号;

  GlobalId:群信息Id;

  UserId:读信息人;

  ReadTime:阅读时间;

  Statue :状态:删除;


  点对点的发信,在MessageText插入站内信的主体内容,在Message表记录发信人和接受人信息;

  群发信息,在MessageText插入站内信的主体内容,在Message表记录发信人和信息Id(收信人Id设置为0),而在GlobalMessage表记录所有收信人(如果收信人是全部用户,则RecId=0);

  那么,用户在登录以后,首先查询Message中有没有RecId=登录用户Id的记录;

  再在Global中查看有没有RecId=0并且RecId=登录用户Id的记录。

 

对于点对点的信息,可以设置Message表Statue来确定是否已读,登录用户也可以可以直接删除这条信息;

对于群发信息,首先读取ReadMessage表,如果存在登录用户Id则用户已经读取,然后查看Statue确定是否删除,如果状态是删除,则这个群发信息不再显示。

 

以上,是我对原作者群发“站内信”的实现的扩展。再次感谢23楼朋友的提法,也欢迎各位提出自己的建议,大家互相借鉴,共同进步。 

 

多谢5楼的提醒:

补充:对GlobalMessage表进行了修改,发信人不论群发或单发全部记录在Message表中,而信的内容记录在MessageText表。

(这个可能还存在错误或不是最好的解决方案)

 

 

 

posted @ 2010-04-08 14:01 zhwily 阅读(2154) 评论(27) 编辑
RegisterStartupScript返回得函数在document装载完成后会执行,

类似于我们平时所说的body onload="f()"里面的函数;

 

RegisterStartupScript是这样定义的:

public void RegisterStartupScript(Type type, string key, string script);

关键是key,如果指定的始终是一个KEY,那么这样的方法就只能使用一次。

如果要多次使用,就必须指定多个key.

posted @ 2010-03-09 16:45 zhwily 阅读(207) 评论(0) 编辑

今天在做一个项目时,程序成功向数据库插入一条数据,

插入的是一篇比较大的文章,而且还有很多样式。 

Id是int型,Content用的是 ntext类型的  

但是当我在手动改数据库Id时出现错误:

 

错误源:.NET.SqlClient Data Provider
错误信息:将截断字符串或二进制数据。
DBCC执行完毕。如果DBCC输出了错误信息,请与管理员联系。
语句已终止。

出现这个问题的直觉就是插入的数据超过了字段的实际长度。

于是打开数据库修改,发现没有超过的啊?

ntext在我的印象中应该算是最大的了。这样都不行吗?

我又把content数据类型换成nvarchar(MAX),手动更改的时候成功了。

在网上搜索的时候发现nvarchar(MAX) 、ntext是有差别的:

以下转载:http://www.cnblogs.com/dudu/archive/2009/10/17/1585152.html

NTEXT:

默认情况下,NTEXT将文本数据存储在LOB结构中, 在表结构中只存储指针,指针指向该数据在LOB中的存储位置。

NVARCHAR(MAX)

默认情况下,不超过8,000字节的数据直接存储在表结构中,超过的才和NTEXT一样将数据存储在LOB结构中。

NTEXT向NVARCHAR(MAX)的转换:

ALTER TABLE 表名 ALTER COLUMN 字段名 NVARCHAR(MAX) null

执行上面的SQL语句之后,虽然完成了转换,但数据的存储结构并没有改变,还是按照NTEXT的默认存储方式存储在LOB中。

如何实现转换后数据按NVARCHAR(MAX)的方式进行存储呢?只需执行下面的语句:

UPDATE 表名 SET 字段名 = 字段名

比如:表名是Comment,字段名是Content,SQL语句就是: UPDATE Comment SET Content = Content

实测数据:100条数据,耗时706秒。 

NTEXT将在以后版本的SQL SERVER中不被支持,微软的文档中建议用NVARCHAR(MAX)取代NTEXT。

ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead. 

意思就是:

  Microsoft SQL Server 的未来版本中,将删除 ntext、 文本和 image 数据类型。 请避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。 使用 nvarchar (max)、 varchar (max) 和 varbinary (max) 来代替。


 

 


posted @ 2009-12-03 16:52 zhwily 阅读(584) 评论(0) 编辑
摘要: 现在很多电子书都是CHM格式的,它们是HTML打包生成的。网上有很多的生成CHM和反编译CHM的工具,有很多还是收费的。。而最近在网上发现了一个命令,是Windows自带的一个反编译Chm的命令命令行格式输入:hh -decompile X:\A Y:\B.chm其中 X:\A是反编译后储存文件的路径, Y:\B.chm是CHM文件的路径。 例如:反编译 E:\test\Other.chm 到 ...阅读全文
posted @ 2009-06-07 11:08 zhwily 阅读(260) 评论(0) 编辑
摘要: xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化XHTML编辑器,基于网络访问并且兼容IE 6.0-8.0,Firefox 3.0,Opera 9.6,Chrome 1.0,Safari 3.22。 google论坛:http://code.google.com/p/xheditor/ Features(特点):Small:初始加载5个文件,包括:1个js(36k)+2个css...阅读全文
posted @ 2009-06-04 17:52 zhwily 阅读(778) 评论(4) 编辑
摘要: 原来Google的图片搜索还可以自己定义尺寸,比起一般的搜索引擎只能选择小,中和大等选择可要高级多了。 使用方法: 在输入搜索内容的同时加入imagesize:xxy即可,其中x, y为横纵像素值。 比如搜索“端午节”1280×800像素的图片,使用:imagesize:1280x800:端午节 即可。 (PS:imagesize之间不能有空格。1280x800,...阅读全文
posted @ 2009-05-27 11:04 zhwily 阅读(78) 评论(0) 编辑
摘要: 谷歌(Google)中国最近已低调推出购物搜索测试版(www.google.cn/products),其搜索范围覆盖了B2C、C2C等领域。这意味着,谷歌开始间接介入潜力巨大的中国网购市场。   在谷歌购物搜索输入商品信息,搜索结果会按照产品型号进行分类,点击进入能看到商家价格、网络评论、产品参数等信息。谷歌购物搜索首页还列出了用户最近查询较多的商品,目前以手机、数码相机等消费电子产品为主。 ...阅读全文
posted @ 2009-05-27 10:09 zhwily 阅读(84) 评论(0) 编辑
摘要: 【黑通社北京讯】今天,Google中国分部谷歌悄然推出了新功能:谷歌百宝箱。用户如果在谷歌上搜索关键词, 在搜索结果页面的左上角会看到网络“搜索百宝箱”提示词。点击“搜索百宝箱”,搜索结果页左侧会增加一些功能选项,包括:结果来源限制(视频、论坛);时 间限制(最新结果、一天内、一周内、一年内);搜索结果展示方式(普通视图、图文并茂、更多描述);搜索结...阅读全文
posted @ 2009-05-22 13:15 zhwily 阅读(275) 评论(0) 编辑