ASP.NET新手开发常用小技巧

    技术2022-05-11  123

      1. 打开新的窗口并传送参数:   response.write("<script>window.open   ('*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+...+"')</script>")         接收参数:      string a = Request.QueryString("id");   string b = Request.QueryString("id1");      2.为按钮添加对话框      Button1.Attributes.Add("onclick","return confirm('确认?')");   button.attributes.add("onclick","if(confirm('are you sure...?'))   {return true;}else{return false;}")      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);    }    }      //日志记录类   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   }      12.Panel 横向滚动,纵向自动扩展       <asp:panel style="overflow-x:scroll;overflow-y:auto;"></asp:panel>      13.回车转换成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>      οnkeydοwn="if(event.keyCode==13) event.keyCode=9"      http://dotnet.aspx.cc/exam/enter2tab.aspx      14.DataGrid超级连接列      DataNavigateUrlField="字段名" DataNavigateUrlFormatString="http://xx/inc/delete.aspx?ID={0}"         15.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=/""+ "#EFF 3F 7"+"/"");    }    }      16.模板列       <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;    }    }    }      17.数字格式化      <%#Container.DataItem("price")%>的结果是500.0000,怎样格式化为500.00?   <%#Container.DataItem("price","{0:#,##0.00}")%>   int i=123456;   string s=i.ToString("###,###.00");      18.日期格式化      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)      19.如何设定全局变量        Global.asax     Application_Start()事件中     添加Application[属性名] xxx;     就是你的全局变量      20.怎样作到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      21.委托讨论      http://community.csdn.net/Expert/topic/2651/2651579.xml?temp=.7183191   http://dev.csdn.net/develop/article/22/22951.shtm      22.读取DataGrid控件TextBox      foreach(DataGrid dgi in yourDataGrid.Items)   {    TextBox tb = (TextBox)dgi.FindControl("yourTextBoxId");    tb.Text....   }      23.DataGrid中有3个模板列包含Textbox分别为 DG_ShuLiang (数量) DG_DanJian(单价) DG_JinE(金额)分别在 5.6.7 列,要求在录入数量及单价的时候自动算出金额即:数量*单价=金额还要求录入时限制为 数值型.我如何用客户端脚本实现这个功能?        〖思归〗       <asp:TemplateColumn HeaderText="数量">    <ItemTemplate>    <asp:TextBox id="ShuLiang" runat='server'   Text='<%# DataBinder.Eval(Container.DataItem,"DG_ShuLiang")%>'    οnkeyup="javascript:DoCal()"    />       <asp:RegularExpressionValidator id="revS" runat="server"   ControlToValidate="ShuLiang" ErrorMessage="must be integer" ValidationExpression="^/d+$" />    </ItemTemplate>    </asp:TemplateColumn>       <asp:TemplateColumn HeaderText="单价">    <ItemTemplate>    <asp:TextBox id="DanJian" runat='server'   Text='<%# DataBinder.Eval(Container.DataItem,"DG_DanJian")%>'    οnkeyup="javascript:DoCal()"    />       <asp:RegularExpressionValidator id="revS2" runat="server"   ControlToValidate="DanJian" ErrorMessage="must be numeric" ValidationExpression="^/d+(/./d*)?$" />       </ItemTemplate>    </asp:TemplateColumn>       <asp:TemplateColumn HeaderText="金额">    <ItemTemplate>    <asp:TextBox id="JinE" runat='server'   Text='<%# DataBinder.Eval(Container.DataItem,"DG_JinE")%>' />    </ItemTemplate>    </asp:TemplateColumn>      <script language="javascript">   function DoCal()   {    var e = event.srcElement;    var row = e.parentNode.parentNode;    var txts = row.all.tags("INPUT");    if (!txts.length || txts.length < 3)    return;       var q = txts[txts.length-3].value;    var p = txts[txts.length-2].value;       if (isNaN(q) || isNaN(p))    return;       q = parseInt(q);    p = parseFloat(p);       txts[txts.length-1].value = (q * p).toFixed(2);   }   </script>      24.datagrid选定比较底下的行时,为什么总是刷新一下,然后就滚动到了最上面,刚才选定的行因屏幕的关系就看不到了      page_load   page.smartNavigation=true      25.Datagrid中修改数据,当点击编辑键时,数据出现在文本框中,怎么控制文本框的大小 ?      private void DataGrid1_ItemDataBound(obj sender,DataGridItemEventArgs e)   {    for(int i=0;i<e.Item.Cells.Count-1;i++)    if(e.Item.ItemType==ListItemType.EditType)    {    e.Item.Cells[i].Attributes.Add("Width", "80px")    }   }      26.对话框      private static string ScriptBegin = "<script language=/"JavaScript/">";   private static string ScriptEnd = "</script>";      public static void ConfirmMessageBox(string PageTarget,string Content)    {       string ConfirmContent="var retValue=window.confirm('"+Content+"');"+"if(retValue){window.location='"+PageTarget+"';}";       ConfirmContent=ScriptBegin + ConfirmContent + ScriptEnd;       Page ParameterPage = (Page)System.Web.HttpContext.Current.Handler;    ParameterPage.RegisterStartupScript("confirm",ConfirmContent);    //Response.Write(strScript);       }

      


    最新回复(0)