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

一位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.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会导致post-back的产生从而丢失了错误信息,所以页面导向应该直接在服务器端执行,这样就可以在错误处理页面得到出错信息并进行相应的处理
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( "
                        " );
                    }
                    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>ο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=""+ "#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控件TextBoxforeach( 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* )?___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 );
        }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值