ASP.Net开发新手常见问题备忘录

来源:互联网 发布:js防止刷新重复提交 编辑:程序博客网 时间:2024/06/05 13:28
一位asp.net初学者学习过程中整理的备忘录,包括“打开新的窗口并传送参数,为按钮添加对话框,删除表格选定记录,删除表格记录警告”等等?lt;?A href=http://cs.mimi163.net/cs/question.php>问题的解决方法.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.Transfere.g// in global.asaxprotected void Application_Error( Object sender, EventArgs e ) {    if ( Server.GetLastError( ) is HttpUnhandledException )    Server.Transfer( "MyErrorPage.aspx" );    //其余的非HttpUnhandledException异常交给asp.NET自己处理就okay了 : )}Redirect会导致post-back的产生从而丢失了错误信息,所以页面导向应该直接在服务器端执行,这样就可以在错误处理页面得到出错信息并进行相应的处理10.清空CookieCookie.Expires=[DateTime];Response.Cookies( "UserName" ).Expires = 011.自定义异常处理//自定义异常处理类 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( "                        " );                    }                    strBuilder.Append( ex.Message ).Append( "                    " ).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>onkeydown="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=""+ "#EFF3F7"+""" );            }        }        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=.7183191http://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" )%>'        onkeyup="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" )%>'        onkeyup="javascript:DoCal( )"        />        <asp:RegularExpressionValidator id="revS2" runat="server" ControlToValidate="DanJian" ErrorMessage="must be numeric" ValidationExpression="^d+( .d* )?___FCKpd___0quot; />        </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 );        }