圓梦

激情燃燒的歲月
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

Asp.net开发常用技巧

Posted on 2007-04-28 23:48  szw104  阅读(243)  评论(0)    收藏  举报

Asp.net开发常用技巧

[日期:2007-03-02] 来源:http://www.aspcool.com  作者: [字体: ]

Asp.net开发常用技巧收集一

 

1. 打开新的窗口并传送参数:

  

  传送参数:

Response.write("<script>window.open('*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="++"')</script>")

  接收参数:

   string a = Request.QueryString("id");

   string b = Request.QueryString("id1");

点评:次方法适合页面布局耦合松的使用,但是如果你的页面对布局要求比较严格,可能实际执行时会出现错位,因为执行这段代码后,会在页面生成脚本,这些脚本重组浏览器显示,所以导致页面布局的编号,一个简单的解决方法是使用RegisterClientScriptBlock方法。  

 

 

  2.为按钮添加对话框

   Button1.Attributes.Add("onclick","return confirm('确认?')");

   Button.attributes.add("onclick","if(confirm('are you sure?')) {return true;}else{return false;}")

   点评:如果是ASP.NET2.0还可以使用OnClientClick事件。

 

  3.删除表格选定记录    

  int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];

  string deleteCmd = "DELETE from Employee where emp_id = " + intEmpID.ToString()

  

  4.删除表格记录警告    

  private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e)

     {   

  switch(e.Item.ItemType)

     {

     case ListItemType.Item :

     case ListItemType.AlternatingItem :

     case ListItemType.EditItem:

     TableCell myTableCell;

     myTableCell = e.Item.Cells[14];

     LinkButton myDeleteButton ;

     myDeleteButton = (LinkButton)myTableCell.Controls[0];

     myDeleteButton.Attributes.Add

     ("onclick","return confirm('您是否确定要删除这条信息');");

  

  break;

   default:

     break;

     }

     }

  点评:这个和上面介绍的技巧本质是一样的

 

  5.点击表格行链接另一页

     private void grdCustomer_ItemDataBound

  

  (object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

  

  {

  

  //点击表格打开

  

  if (e.Item.ItemType == ListItemType.Item ||

     e.Item.ItemType == ListItemType.AlternatingItem)

     e.Item.Attributes.Add("onclick","window.open

     ('Default.aspx?id=" + e.Item.Cells[0].Text + "');");

     }

  

  双击表格连接到另一页,在itemDataBind事件中   

  if(e.Item.ItemType == ListItemType.Item ||

     e.Item.ItemType == ListItemType.AlternatingItem)

     {

  string OrderItemID =e.item.cells[1].Text;

   e.item.Attributes.Add("ondblclick", "location.href='../ShippedGrid.aspx?id=" + OrderItemID + "'");

  

  }

  

  双击表格打开新一页

  

  if(e.Item.ItemType == ListItemType.Item ||

    e.Item.ItemType == ListItemType.AlternatingItem)

    {

    string OrderItemID =e.item.cells[1].Text;

       e.item.Attributes.Add("ondblclick",  

  "open('../ShippedGrid.aspx?id=" + OrderItemID + "')");

  

  }

  

  特别注意:【?id= 处不能为 ?id =

 

6.表格超连接列传递参数

  <asp:HyperLinkColumn Target="_blank" headertext="ID" DataTextField="id"

  NavigateUrl="aaa.aspx?id='<%# DataBinder.Eval(Container.DataItem, "数据字段1")%>'

   & name='<%# DataBinder.Eval(Container.DataItem, "数据字段2")%>' />

  

  7.表格点击改变颜色

  

  if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)

  {

   e.Item.Attributes.Add("onclick","this.style.backgroundColor='#99cc00';

  this.style.color='buttontext';this.style.cursor='default';");

  }

  

  写在DataGrid_ItemDataBound

   if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)

  {

   e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#99cc00';

  this.style.color='buttontext';this.style.cursor='default';");

  e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='';this.style.color='';");

  }

  

  8.关于日期格式

    日期格式设定

     DataformatString="{0:yyyy-MM-dd}" itembound事件中   

  e.items.cell["你的列"].text=DateTime.Parse(e.items.cell["你的列"].text.ToString("yyyy-MM-dd"))

  

  9.获取错误信息并到指定页面

    不要使用Response.Redirect,而应该使用Server.Transfer   

   e.g

    // in global.asax

  protected void Application_Error(Object sender, EventArgs e) {

   if (Server.GetLastError() is HttpUnhandledException)

   Server.Transfer("MyErrorPage.aspx");

  

  //其余的非HttpUnhandledException异常交给ASP.NET自己处理就okay

  }

   Redirect会导致postback的产生从而丢失了错误信息,所以页面导向应该直接在服务器端执行,这样就可以在错误处理页面得到出错信息并进行相应的处理

  

  10.清空Cookie

   Cookie.Expires=[DateTime];

  Response.Cookies("UserName").Expires = 0

 

11.自定义异常处理

   //自定义异常处理类

  using System;

  using System.Diagnostics;

  namespace MyAppException

  {

  /**//// <summary>

  /// 从系统异常类ApplicationException继承的应用程序异常处理类。

  /// 自动将异常内容记录到Windows NT/2000的应用程序日志

  /// </summary>

  public class AppException:System.ApplicationException

  {

   public AppException()

   {

   if (ApplicationConfiguration.EventLogEnabled)

   LogEvent("出现一个未知错误。");

   }

  

   public AppException(string message)

   {

   LogEvent(message);

   }

  

   public AppException(string message,Exception innerException)

   {

   LogEvent(message);

   if (innerException != null)

   {

   LogEvent(innerException.Message);

   }

   }





1、 日志记录类

日志纪录类可以把数据存储在日志纪录里。系统日志可以在运行里输入“eventvew.msc”进行查看。

  using System;

  using System.Configuration;

  using System.Diagnostics;

  using System.IO;

  using System.Text;

  using System.Threading;

  

  namespace MyEventLog

  {

  /**//// <summary>

  /// 事件日志记录类,提供事件日志记录支持

  /// <remarks>

  /// 定义了4个日志记录方法 (error, warning, info, trace)

  /// </remarks>

  /// </summary>

  public class ApplicationLog

  {

   /**//// <summary>

   /// 将错误信息记录到Win2000/NT事件日志中

   /// <param name="message">需要记录的文本信息</param>

   /// </summary>

   public static void WriteError(String message)

   {

  

   WriteLog(TraceLevel.Error, message);

   }

  

   /**//// <summary>

   /// 将警告信息记录到Win2000/NT事件日志中

   /// <param name="message">需要记录的文本信息</param>

   /// </summary>

   public static void WriteWarning(String message)

   {

  

   WriteLog(TraceLevel.Warning, message);

   }

  

   /**//// <summary>

   /// 将提示信息记录到Win2000/NT事件日志中

   /// <param name="message">需要记录的文本信息</param>

   /// </summary>

   public static void WriteInfo(String message)

   {

   WriteLog(TraceLevel.Info, message);

   }

   /**//// <summary>

   /// 将跟踪信息记录到Win2000/NT事件日志中

   /// <param name="message">需要记录的文本信息</param>

   /// </summary>

   public static void WriteTrace(String message)

   {

  

   WriteLog(TraceLevel.Verbose, message);

   }

  /**//// <summary>

   /// 格式化记录到事件日志的文本信息格式

   /// <param name="ex">需要格式化的异常对象</param>

   /// <param name="catchInfo">异常信息标题字符串.</param>

   /// <retvalue>

   /// <para>格式后的异常信息字符串,包括异常内容和跟踪堆栈.</para>

   /// </retvalue>

   /// </summary>

   public static String formatException(Exception ex, String catchInfo)

   {

   StringBuilder strBuilder = new StringBuilder();

   if (catchInfo != String.Empty)

   {

   strBuilder.Append(catchInfo).Append("\r\n");

   }

   strBuilder.Append(ex.Message).Append("\r\n").Append(ex.StackTrace);

   return strBuilder.ToString();

   }

  

   /**//// <summary>

   /// 实际事件日志写入方法

   /// <param name="level">要记录信息的级别(error,warning,info,trace).</param>

   /// <param name="messageText">要记录的文本.</param>

   /// </summary>

   private static void WriteLog(TraceLevel level, String messageText)

   {

  

   try

   {

   EventLogEntryType LogEntryType;

   switch (level)

   {

   case TraceLevel.Error:

   LogEntryType = EventLogEntryType.Error;

   break;

   case TraceLevel.Warning:

   LogEntryType = EventLogEntryType.Warning;

   break;

   case TraceLevel.Info:

   LogEntryType = EventLogEntryType.Information;

   break;

   case TraceLevel.Verbose:

   LogEntryType = EventLogEntryType.SuccessAudit;

   break;

   default:

   LogEntryType = EventLogEntryType.SuccessAudit;

   break;

   }

  

   EventLog eventLog = new EventLog("Application", ApplicationConfiguration.EventLogMachineName, ApplicationConfiguration.EventLogSourceName );

   //写入事件日志

   eventLog.WriteEntry(messageText, LogEntryType);

  

   }

   catch {} //忽略任何异常

   }

  } //class ApplicationLog

  } 

 

2.Panel 横向滚动,纵向自动扩展

   <asp:panel style="overflow-x:scroll;overflow-y:auto;"></asp:panel>

  

3.回车转换成Tab

  

  <script language="javascript" for="document" event="onkeydown">

  if(event.keyCode==13 && event.srcElement.type!='button' &&

  event.srcElement.type!='submit' && event.srcElement.type!='reset'

  && event.srcElement.type!=''&& event.srcElement.type!='textarea');

  event.keyCode=9;

  </script>

  

  onkeydown="if(event.keyCode==13) event.keyCode=9"

  http://dotnet.aspx.cc/exam/enter2tab.aspx

  

 4.DataGrid超级连接列

  

  DataNavigateUrlField="字段名" DataNavigateUrlformatString="http://xx/inc/delete.aspx?ID={0}"

  

  

 5.DataGrid行随鼠标变色    

  private void DGzf_ItemDataBound

  (object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

   {

   if (e.Item.ItemType!=ListItemType.Header)

   {

   e.Item.Attributes.Add( "onmouseout","this.style.backgroundColor=

  \""+e.Item.style["BACKGROUND-COLOR"]+"\"");

   e.Item.Attributes.Add( "onmouseover","this.style.backgroundColor=\""+ "#EFF3F7"+"\"");

   }

   }

  

  6.模板列

  

  <ASP:TEMPLATECOLUMN visible="False" sortexpression="demo" headertext="ID">

  <ITEMTEMPLATE>

   <ASP:LABEL text='<%# DataBinder.Eval(Container.DataItem,

  "ArticleID")%>' runat="server" width="80%" id="lblColumn" />

  </ITEMTEMPLATE>

  </ASP:TEMPLATECOLUMN>

  

  <ASP:TEMPLATECOLUMN headertext="选中">

  <HEADERstyle wrap="False" horizontalalign="Center"></HEADERstyle>

  <ITEMTEMPLATE>

   <ASP:CHECKBOX id="chkExport" runat="server" />

  </ITEMTEMPLATE>

  <EDITITEMTEMPLATE>

  <ASP:CHECKBOX id="chkExportON" runat="server" enabled="true" />

  </EDITITEMTEMPLATE>

  </ASP:TEMPLATECOLUMN>

  

后台代码

 

  protected void CheckAll_CheckedChanged(object sender, System.EventArgs e)

   {

   //改变列的选定,实现全选或全不选。

   CheckBox chkExport ;

   if( CheckAll.Checked)

   {

   foreach(DataGridItem oDataGridItem in MyDataGrid.Items)

   {

   chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");

   chkExport.Checked = true;

   }

   }

   else

   {

   foreach(DataGridItem oDataGridItem in MyDataGrid.Items)

   {

   chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");

   chkExport.Checked = false;

   }

   }

   }

 

7.数字格式化   

  <%#Container.DataItem("price")%>的结果是500.0000,怎样格式化为500.00?

  <%#Container.DataItem("price","{0:#,##0.00}")%>

  int i=123456;

  string s=i.ToString("###,###.00");

  

 8.日期格式化

  

  aspx页面内:<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date")%>

  显示为: 2004-8-11 19:44:28

  我只想要:2004-8-11

    <%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>

    应该如何改?

   

  【格式化日期】

  取出来,一般是object

  ((DateTime)objectFromDB).ToString("yyyy-MM-dd");

  

  【日期的验证表达式】

  A.以下正确的输入格式: [2004-2-29], [2004-02-29 10:29:39 pm], [2004/12/31]   

  ^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))

  [\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|

  ([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468]

  [1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]

  ?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|

  ([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))

  (\s(((0?[1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))

  ([AM|PM|am|pm]{2,2})))?$

  

  B.以下正确的输入格式:[0001-12-31], [9999 09 30], [2002/03/03]

  

  ^\d{4}[\-\/\s]?((((0[13578])|(1[02]))[\-\/\s]?(([0-2][0-9])|(3[01])))|

  (((0[469])|(11))[\-\/\s]?(([0-2][0-9])|(30)))|(02[\-\/\s]?[0-2][0-9]))$

  

  【大小写转换】    

  HttpUtility.HtmlEncode(string);

  HttpUtility.HtmlDecode(string)

  

  9.如何设定全局变量    

    Global.asax

    Application_Start()事件中

    添加Application[属性名] xxx;

    就是你的全局变量

  

  10.怎样作到HyperLinkColumn生成的连接后,点击连接,打开新窗口?

 

  HyperLinkColumn有个属性Target,将器值设置成"_blank"即可.(Target="_blank")

  ASPNETMENU】点击菜单项弹出新窗口

    在你的menuData.xml文件的菜单项中加入URLTarget="_blank"

    如:   

  <?xml version="1.0" encoding="GB2312"?>

  <MenuData ImagesBaseURL="images/">

   <MenuGroup>

   <MenuItem Label="内参信息" URL="Infomation.aspx" >

   <MenuGroup ID="BBC">

   <MenuItem Label="公告信息" URL="Infomation.aspx"

  URLTarget="_blank" LeftIcon="file.gif"/>

   <MenuItem Label="编制信息简报" URL="NewInfo.aspx" LeftIcon="file.gif" />

   最好将你的aspnetmenu升级到1.2