“软件工业奥斯卡”SYS-CON 读者选择奖: .NET 开发

原文出自太平洋电脑网 http://www.pconline.com.cn @ 2006-04
---------------------------------------------------------------------------------
本文介绍了.NET开发的一些信息。
---------------------------------------------------------------------------------

2006.03.09  来自:CSDN EricLee

SYS-CON 媒体(www.sys-con.com)在近日揭晓了一年一度的" 读者选择奖" .这个奖项有“软件工业奥斯卡”之称.今年是第10届,有超过1.7万的SYS-CON读者参与了投票,分别评选出了在SOA、Web Services, Java 和 XML技术等领域的最佳产品、工具以及最佳提名。

1)最佳 .NET 指导培训

获胜者: ASP.NET (Global Knowledge)

提名:
1) .NET Architecture and Design: Building Distributed Applications with .NET (DevelopMentor)
2) Mastering the .NET Framework (Wintellect)
3) VB.NET Programming (Global Knowledge)

2) 最佳 .NET 应用管理

获胜者:BusinessObjects 6.5 (Business Objects)

提名:
1) AppSight Application Support System (Identify Software)
2) ManageSoft 7.0 (ManageSoft)
3) PocketAdmin for Windows (Expand Beyond)

3) 最佳 .NET 人物

获胜者: Scott Guthrie (Microsoft)

提名:
1) Doug Purdy (Microsoft)
2) Christopher Frenz (New York Medical College)
3) Jason Beres (Infragistics)

4) 最佳 .NET 网站

获胜者:The Code Project (The Code Project)

提名:
1) Microsoft Developer Network (MSDN) (Microsoft)
2) www.asp.net (Microsoft)
3) vbCity Developer Community (vbCity)

5) 最佳 .NET 测试, Q/A 和调试工具

获胜者: AppSight Application Support System (Identify Software)

提名:
1) Compuware DevPartner Studio Professional Edition (Compuware)
2) ANTS Profiler (Red Gate Software)
3) .TEST (Parasoft)

6)最佳 .NET 建模、优化和分析工具

获胜者: SQL Server 2000 Analysis Services (Microsoft)

提名:
1) Borland Together Edition for Visual Studio .NET (Borland)
2) Compuware DevPartner Studio Professional Edition (Compuware)
3) MyGeneration (MyGeneration Software)

7) 最佳 .NET 源代码控制与团队辅助工具

获胜者:Visual SourceSafe (Microsoft)

提名:
1) SourceGear Vault (SourceGear)
2) Borland StarTeam (Borland)
3) Compuware DevPartner Studio Enterprise Edition (Compuware)

8) 最佳 .NET 库与控件

获胜者: DataWindow .NET (Sybase)

提名:
1) telerik r.a.d. controls web-suite (telerik)
2) Nevron Chart for .NET (Nevron)
3) NetAdvantage (Infragistics)

9) 最佳 .NET 编辑器与 IDE

获胜者: Visual Studio .NET 2003 (Microsoft)

提名:
1) Jetbrains ReSharper (JetBrains)
2) Macromedia Dreamweaver MX 2004 (Adobe)
3) Borland Delphi 8 for the Microsoft .NET Framework (Borland)

10) 最佳 .NET 性能分析器、优化器、反编译器和混淆器

获胜者: .NET Reflector (Lutz Roeder)

提名:
1) CLR Profiler v. 2.0 (Microsoft)
2) Compuware DevPartner Profiler Community Edition (Compuware)
3) Dotfuscator Inside Visual Studio (PreEmptive Solutions)

11) 最佳 .NET 提供程序、数据库和工具

获胜者:DiscountASP.NET Web Hosting (DiscountASP.NET)

提名:
1) Oracle Data Provider for .NET (Oracle)
2) ComponentOne Studio Enterprise (ComponentOne)
3) Altova Enterprise XML Suite (Altova)

12) 最佳 .NET 构建与安装工具

获胜者: InstallShield (Macrovision)

提名:
1) Wise for Windows Installer (Wise Solutions)
2) InstallAnywhere .NET (Macrovision)
3) Automated Build Studio (AutomatedQA)

13) 最佳.NET 书 / 培训软件

获胜者: Expert C# Business Objects (Apress)

提名:
1) Windows Forms Programming in C# by Chris Sells (Addison-Wesley)
2) Programming C#, 3rd Edition (O’Reilly)
3) ASP .NET Cookbook (O’Reilly)

posted @ 2006-05-06 19:53 Pierre Lee 阅读(54) | 评论 (0) | 编辑 收藏

HTML Meta

HTML Meta

原文出自太平洋电脑网 http://www.pconline.com.cn @ 2006-04
---------------------------------------------------------------------------------
本文介绍了几个HTML中的Meta标记,做个参考吧。
---------------------------------------------------------------------------------

  • Meta是用来在HTML文档中模拟HTTP协议的响应头报文。
  • meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。
  • meta 的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和keywords(分类关键词),所以应该给每页加一个meta值。比较常用的有以下几个:

name 属性

  1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等;

  2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词;

  3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容;

  4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者;

  5、<meta name="Robots" contect= "all|none|index|noindex|follow|nofollow">

  其中的属性说明如下:

  设定为all:文件将被检索,且页面上的链接可以被查询;

  设定为none:文件将不被检索,且页面上的链接不可以被查询;

  设定为index:文件将被检索;

  设定为follow:页面上的链接可以被查询;

  设定为noindex:文件将不被检索,但页面上的链接可以被查询;

  设定为nofollow:文件将不被检索,页面上的链接可以被查询。

http-equiv属性

  1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80">

和 <meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;

  又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集;

  2、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时间n秒内,跳转到页面http://yourlink;

  3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式;

  4、<meta http-equiv="Pragma" contect="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;

  5、<meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT">cookie设定,如果网页过期,存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式;

  6、<meta http-equiv="Pics-label" contect="">网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的;

  7、<meta http-equiv="windows-Target" contect="_top">强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;

  8、<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)">和<meta http-equiv="Page-Exit" contect="revealTrans(duration=20,transtion=6)">设定进入和离开页面时的特殊效果,这个功能即FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个frame页面。

posted @ 2006-05-06 19:43 Pierre Lee 阅读(70) | 评论 (0) | 编辑 收藏

2006年5月3日

ASP.NET-JavaScript辅助类

ASP.NET JavaScriptHelper
PeterLee ©2006  @ 2006-05-02
---------------------------------------------------------------------------------------
本文介绍了ASP.NET向WebPage注册客户端脚本特别是JavaScript的一种方法,
并提供了具体辅助类实现。
欢迎大家与我探讨,并请提出宝贵意见:MailTo:SilentWait4U@163.com
----------------------------------------------------------------------------------------

概述:
  在ASP.NET的开发中,Web层开发要实现与用户的交互,常常用到如显示一个警告对话框、删除前弹出确认对话框、打开一个新窗口、关闭当前窗口等等功能。而这些功能一般说来要用客户端脚本特别是JavaScript实现。
  而我们可以发现,JavaScript中除了对页面样式的控制(美工效果)的代码外,功能性代码大体上可以分为以下几种:
  1、确认;
  2、警告;
  3、关闭窗口;
  4、导航;
  5、打开模式窗口、非模式窗口、自定义对话框、普通窗口;
  6、PopUp;
  7、验证输入(指ASP.NET验证控件不能实现的,如验证两个文本框必须输入且只输入一个);
  8、MaskEdit(掩码输入);
  。。。

  考虑到代码重用,我们可以想到可以设计一个比较通用的静态类来实现这些功能。经过我初步总结,设计实现了名为JavaScript的类,并有选择性地实现了以上功能。在我的实际应用中曾不断修正此类的功能性错误,并且确实方便使用。所以特粘贴到此处请大家论正。源代码(后附)中我尽可能地加了注释,希望大家阅读起来不是很费劲。

实现原理:
  通过对字符串的操作组合客户端脚本,并使用Page.RegisterClientScriptBlock(在ASP.NET2.0中是System.Web.UI.ClientScriptManager..RegisterClientScriptBlock,以下相似方法同样只是命名空间不同)方法注册到页面中去。

  ASP.NET管理、注册、添加客户端脚本主要通过以下几种方法:
  1、RegisterClientScriptBlock      
    可以向页面中发送客户端代码块(当然可以不仅仅是脚本,也可以是其它的文本),这段代码会被写到Form里的开始部分。
  2、IsClientScriptBlockRegistered   
    根据一个页面级的Key来判断某段由RegisterClientScriptBlock发送的客户端代码是否已被发送到了客户端。
  3、RegisterStartupScript   
    可以向页面中发送客户。端代码块,这段代码会被写到Form里的结束部分。这样就可以如其名称一样,在页面加载完成后写入一段自动运行的代码。
  4、IsStartupScriptRegistered 
    根据一个页面级的Key来判断某段由RegisterStartupScript发送的客户端代码是否已被发送到了客户端。
  5、RegisterArrayDeclaration(
    通过服务器向客户端注册数组。
    例如 服务器端C#代码如下:RegisterArrayDeclaration("myArray", "'x','y','z'");
    其发送到客户端 就成为:
    <script language="javascript">
    <!--
    var myArray =  new Array('x','y','z');
    // -->
    </script>
  6、RegisterOnSubmitStatement
    发送一段语句到客户端,这段语句在窗体提交前触发并执行。

示例:  一般说来,要想实现在客户端显示一个警告对话框,我们会采用如下方法:
  Response.Write("<script language=/"javascript/">alert('Display an alert dialog.');</script>");
  或者
  this.RegisterClientScriptBlock( 'alert1', "alert('Display an alert dialog.');" );

  而采用此类后,实现同样功能只需要调用一句:JavaScript.alert("Display an alert dialog.");即可。

  在这样长度比较短的javascript语句中,此类的方便性可能还体现不出来,但试想我们要实现打开新窗口的功能。
  了解JavaScript的朋友都知道,打开新窗口一般是通过window.open()方法实现的,它有众多的参数。并不是每一个人都能准确得记得并准确无误、快速地写出这个方法的,此时此类的作用便体现出来了。
  本类中我实现了一个名为OpenWindow的方法,原型是:
  重载1:
  public static bool OpenWindow(string url, string windowName, int height, int width,
            int left, int top, bool isWithToolbar, bool isWithMenubar, bool resizable, bool isWithLocation,
            bool isWithStatusbar, bool isWithScrollbars, bool isFront, bool isFullScreen, int autoCloseInSeconds)
  重载2:
  public static bool OpenWindow(string url, string windowName, int height, int width)

  所以要想实现打开新窗口的功能,只要调用这个方法即可,无需每次都事先组合好脚本然后写入或注册到客户端。

拓展:
  常用的方法可以考虑设计成通过的类来实现,减少代码重复,提高效率也减少错误再现的机率。
  

ReadFirst:
  1、此类中的方法中,如果返回值类型是bool或者不是string型的,一般说来只能用在*.aspx.cs中,而不能用在非页面后台代码中,原因是返回bool型的方法一般是向页面注册JavaScript,并返回注册成功与否的。如果页面不存在,当然不能注册任何脚本;
  2、此类采用了私有的构造函数,任何试图实例化该类的操作都将失败;
  3、sealed,不可继承该类。
  4、此类的方法,在不支持JavaScript的浏览器中会失效;
  5、由于向页面中注册脚本方法在ASP.NET2.0中做了改变,所以本类的实现有两个版本,此处仅以ASP.NET2.0为例介绍,如欲获得1.X的版本,请联系作者MailTo:SilentWait4U@163.com
  6、在实际使用中,如果您想在Page_Load事件处理中注册客户端脚本并终止页面处理,请参考用以下方法,而不是直接调用此类中方法并return。
   ...Page_Load(...)
            {
                 Response.Clear();
                 Response.Write(JavaScript.tagBegin + JavaScript.Get...Script(para1,para2) + JavaScript.tagEnd);
                 Response.End();
            }

源代码:JavaScriptHelper(.NET Framework 2.0)

posted @ 2006-05-03 01:02 Pierre Lee 阅读(336) | 评论 (1) | 编辑 收藏

2006年3月27日

ASP.NET程序中常用的三十三种代码

ASP.NET程序中常用的三十三种代码

原文出自《电脑迷》杂志的配套光盘 @ 2006-03-27
---------------------------------------------------------------------------------
本文介绍了ASP.NET常用的一些代码,指不定会用上呢...
---------------------------------------------------------------------------------

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

   传送参数:

response.write("<script> window .open('* .asp x?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("/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"

   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.读取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);
}

   27. 将时间格式化:string aa=DateTime.Now.ToString("yyyy年MM月dd日");

   1.1 取当前年月日时分秒

currentTime=System.DateTime.Now;

   1.2 取当前年

int 年= DateTime.Now.Year;

   1.3 取当前月

int 月= DateTime.Now.Month;

   1.4 取当前日

int 日= DateTime.Now.Day;

   1.5 取当前时

int 时= DateTime.Now.Hour;

   1.6 取当前分

int 分= DateTime.Now.Minute;

   1.7 取当前秒

int 秒= DateTime.Now.Second;

   1.8 取当前毫秒

int 毫秒= DateTime.Now.Millisecond;

   28.自定义分页代码:

   先定义变量 :

public static int pageCount; //总页面数
public static int curPageIndex=1; //当前页面

   下一页:

if(DataGrid1.CurrentPageIndex < (DataGrid1.PageCount - 1))
{
  DataGrid1.CurrentPageIndex += 1;
  curPageIndex+=1;
}

bind(); // DataGrid1数据绑定函数

   上一页:

if(DataGrid1.CurrentPageIndex >0)
{
  DataGrid1.CurrentPageIndex += 1;
  curPageIndex-=1;
}

bind(); // DataGrid1数据绑定函数

   直接页面跳转:

int a=int.Parse(JumpPage.Value.Trim());//JumpPage.Value.Trim()为跳转值

if(a<DataGrid1.PageCount)
{
  this.DataGrid1.CurrentPageIndex=a;
}

bind();

   29.DataGrid使用:

   添加删除确认:

private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
  foreach(DataGridItem di in this.DataGrid1.Items)
  {
   if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.AlternatingItem)
   {
    ((LinkButton)di.Cells[8].Controls[0]).Attributes.Add("onclick","return confirm('确认删除此项吗?');");
   }
  }
}

   样式交替:

ListItemType itemType = e.Item.ItemType;

if (itemType == ListItemType.Item )
{
  e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor='#FFFFFF';";
  e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor='#d9ece1';cursor='hand';" ;
}
else if( itemType == ListItemType.AlternatingItem)
{
  e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor='#a0d7c4';";
  e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor='#d9ece1';cursor='hand';" ;
}

   添加一个编号列:

DataTable dt= c.ExecuteRtnTableForAccess(sqltxt); //执行sql返回的DataTable
DataColumn dc=dt.Columns.Add("number",System.Type.GetType("System.String"));

for(int i=0;i<dt.Rows.Count;i++)
{
  dt.Rows[i]["number"]=(i+1).ToString();
}

DataGrid1.DataSource=dt;
DataGrid1.DataBind();

   DataGrid1中添加一个CheckBox,页面中添加一个全选框

private void CheckBox2_CheckedChanged(object sender, System.EventArgs e)
{
  foreach(DataGridItem thisitem in DataGrid1.Items)
  {
   ((CheckBox)thisitem.Cells[0].Controls[1]).Checked=CheckBox2.Checked;
  }
}

   将当前页面中DataGrid1显示的数据全部删除

foreach(DataGridItem thisitem in DataGrid1.Items)
{
  if(((CheckBox)thisitem.Cells[0].Controls[1]).Checked)
  {
   string strloginid= DataGrid1.DataKeys[thisitem.ItemIndex].ToString();
   Del (strloginid); //删除函数
  }
}

   30.当文件在不同目录下,需要获取数据库连接字符串(如果连接字符串放在Web.config,然后在Global.asax中初始化)

   在Application_Start中添加以下代码:

Application["ConnStr"]=this.Context.Request.PhysicalApplicationPath+ConfigurationSettings.
    AppSettings["ConnStr"].ToString();

   31. 变量.ToString()

   字符型转换 转为字符串

12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%

   32、变量.Substring(参数1,参数2);

   截取字串的一部分,参数1为左起始位数,参数2为截取几位。 如:string s1 = str.Substring(0,2);

   33.在自己的网站上登陆其他网站:(如果你的页面是通过嵌套方式的话,因为一个页面只能有一个FORM,这时可以导向另外一个页面再提交登陆信息)

SCRIPT language="javascript">
<!--
  function gook(pws)
  {
   frm.submit();
  }
//-->

</SCRIPT> <body leftMargin="0" topMargin="0" οnlοad="javascript:gook()" marginwidth="0" marginheight="0">
<form name="frm" action=" http://220.194.55.68:6080/login.php?retid=7259 " method="post">
<tr>
<td>
<input id="f_user" type="hidden" size="1" name="f_user" runat="server">
<input id="f_domain" type="hidden" size="1" name="f_domain" runat="server">
<input class="box" id="f_pass" type="hidden" size="1" name="pwshow" runat="server">

<INPUT id="lng" type="hidden" maxLength="20" size="1" value="5" name="lng">
<INPUT id="tem" type="hidden" size="1" value="2" name="tem">

</td>

</tr>

</form>

   文本框的名称必须是你要登陆的网页上的名称,如果源码不行可以用vsniffer 看看。

   下面是获取用户输入的登陆信息的代码:

string name;
name=Request.QueryString["EmailName"];

try
{
  int a=name.IndexOf("@",0,name.Length);
  f_user.Value=name.Substring(0,a);
  f_domain.Value=name.Substring(a+1,name.Length-(a+1));
  f_pass.Value=Request.QueryString["Psw"];
}

catch
{
  Script.Alert("错误的邮箱!");
  Server.Transfer("index.aspx");
}

posted @ 2006-03-27 19:41 Pierre Lee 阅读(943) | 评论 (3) | 编辑 收藏

2006年3月6日

ASP.NET编程中的十大技巧

ASP.NET编程中的十大技巧
原文出自yllaji 的 Blog : http://blog.csdn.net/yllaji/  @ 2006-03-06
---------------------------------------------------------------------------------
本文介绍了一些本人认为较好的“经验”...
---------------------------------------------------------------------------------    
  
  
1、在使用Visual Studio .NET时,除直接或非引用的对象外,不要使用缺省的名字。 
   
  .NET带来的好处之一是所有的源代码和配置文件都是纯文本文件,能够使用Notepad或WordPad等任意的文本编辑器进行编辑。如果不愿意,我们并非一定要使用Visual Studio .NET作为集成开发环境。但使用了Visual Studio .NET,我们可以在Windows文件管理器中看到文件,或在Visual Studio .NET之外从文本编辑器中浏览文件的内容。
  使用Visual Studio .NET作为集成开发环境有许多好处,其中最显著的好处是它极大地提高了生产效率。使用Visual Studio. NET,我们能够在付出较小代价的情况下更快地开发软件。作为集成开发环境一部分的IntelliSense提供自动的代码完成、在输入方法或函数时提供动态帮助、语法错误的实时提示,以及其他能够提高生产效率的功能。
  象其他复杂的工具那样,在学会如何充分发挥它的作用和掌握其“习性”前,Visual Studio .NET也会使我们产生一种挫折感。有时,它象一个难以了解的黑盒子,会生成大量的文件和许多无用的代码。
  Visual Studio .NET的一个功能是,无论是类、控件或表单中的对象,它都能够为新对象提供缺省名字。例如,如果我们创建了一个新的ASP.NET Web Application,其缺省的名字将是WebApplication1。我们可以在“新工程”对话框中方便地改变该应用的名字,但同时改变的只是该应用程序的名字空间的名字及其所在的虚拟目录,源代码文件的缺省名字仍然是WebForm1.aspx和WebForm1.aspx.cs(C#工程)或WebForm1.aspx.vb(VB.NET工程)。
  
  我们可以在方案浏览器中改变ASPX和代码使用的文件名字,但Web页类的名字仍然将是WebForm1。如果在该Web表单上生成一个按钮,其缺省的名字将是Button1。事实上,所有控件的名字都是由控件的类型和数字组成的。
  我们能够,也应该将应用程序中所有的表单和控件的名字都修改成有意义的名字。对于较小的演示性程序而言,缺省的名字还能够胜任,但如果应用程序由多个表单,每个表单上有许多按钮和标签时,象frmStartup、frmDataEntry和frmReports这样的表单名就比Form1、Form2和Form3这样的名字更易于理解和维护。
  如果表单上控件要在代码的其他地方引用,使它有一个有意义的名字就更重要了。btnOK、btnCancel和btnPrint这样的名字使看代码的人更容易理解,因而,也比名字为Button1、Button2、Button3这样的控件更容易维护。
  修改一个工程中所有文件中出现的一个名字的一个好方法是,在Visual Studio .NET菜单中依次选择“编辑”->“发现和替换”->“替换”命令。
  在看二周前编写的代码时,我们经常就象第一次见到这些代码一样,因此使它们有一个有助于我们理解其含义的名字是十分有必要的。 
   
   
2、即使不使用Visual Studio .NET进行编程,使用代码支持文件也有利于提高应用程序的性能
   
  在Web应用程序、Web服务或Web控件等所有的ASP.NET Web工程中,Visual Studio .NET都使用代码支持文件。代码支持文件使工程具有更好的组织、模块性,更适合多人组成的开发团队。另外,它还会带来性能的提高。
  代码支持文件的内容被编译成一个组合文件中的类,一般是一个DLL文件,有时也可以是EXE文件。该文件驻留在应用程序的组合体高速缓冲区中,在应用程序启动时,可以立即得到它。
  如果代码是包含在<script>标记中或ASPX文件代码中,它仍然会被编译成一个Web页类。在这种情况下,每当该网页在应用程序对话中第一次加载时,都需要重新进行编译,被编译的类就会驻留在内存中。每当计算机启动、IIS停止、重新启动或者源代码、配置文件改变时,该文件必须重新编译。尽管不大,但这样引起的性能损耗也是相当可观的。
  
  
  3、尽量减少表单回送
  
  每当点击Web网页上的Button、LinkButton或ImageButton控件时,表单就会被发送到服务器上。如果控件的AutoPostBack属性被设置为true,如果CheckBox、CheckBoxList等控件的状态被改变后,也会使表单会发送回服务器。
  每次当表单被发送回服务器,就会被重新加载,启动Page_Load事件,执行Page_Load事件处理程序中的所有代码。把网页的初始化代码放在这里是最合适不过的了。我们经常会希望在每次加载网页时执行一些代码,而希望只有在网页第一次加载时执行另一些代码,甚至希望一些代码在除首次加载外的每次加载时执行。
  可以利用IsPostBack特性来完成这一功能。在网页第一次加载时,该属性的值是false。如果网页因回送而被重新加载,IsPostBack属性的值就会被设置为true。通过测试,可以在任意时候执行指定的代码。下面是相关的C#代码:
  protected void Page_Load(Object sender, EventArgs e)
  {
  // 网页每次加载时,执行的一些操作
  if (!IsPostBack)
  {
  // 网页第一次加载时执行的操作
  }
  else
  {
  // 回送时执行的操作
  }
  
  // 网页每次加载时执行的操作
  }
  我们希望尽量不引起回送(每次回送都会要求服务器进行一系列的操作),即使引起回送后。也希望能够执行尽量少的操作。大规模、浪费时间的操作(例如数据库查找)尤其应当避免,因为它们能够延长应用程序的响应时间。
  
  
  4、使用StringBuilder类
  
  字符串在.NET框架中是不可变的,这意味着改变字符串的操作符和方法会返回字符串的改变后的拷贝,这意味着性能还有提高的空间。当进行大量的字符串操作时,使用StringBuilder类就是一种比较好的选择了。
  下面的C#代码测试用二种方式从10000个子字符串中生成字符串所需要的时间。第一次使用了一个简单的字符串串联操作;第二次使用了StringBuilder类。要想查看结果字符串,可以去掉下面的代码中注解行的注解符号:
  
  <%@ Page Language="C#" %>
  
  <script runat="server">
  void Page_Load(Object Source, EventArgs E)
  {
  int intLimit = 10000;
  DateTime startTime;
  DateTime endTime;
  TimeSpan elapsedTime;
  string strSub;
  string strWhole = "";
  
  // 首先执行字符串连接操作
  startTime = DateTime.Now;
  for (int i=0; i < intLimit; i++)
  {
  strSub = i.ToString();
  strWhole = strWhole + " " + strSub;
  }
  endTime = DateTime.Now;
  elapsedTime = endTime - startTime;
  lblConcat.Text = elapsedTime.ToString();
  // lblConcatString.Text = strWhole;
  
  // 使用stringBuilder类进行同样的操作
  startTime = DateTime.Now;
  StringBuilder sb = new StringBuilder();
  for (int i=0; i < intLimit; i++)
  {
  strSub = i.ToString();
  sb.Append(" ");
  sb.Append(strSub);
  }
  endTime = DateTime.Now;
  elapsedTime = endTime - startTime;
  lblBuild.Text = elapsedTime.ToString();
  // lblBuildString.Text = sb.ToString();
  }
  
  </script>
  
  <html>
  <body>
  <form runat="server">
  
  <h1>String Concatenation Benchmark</h1>
  
  Concatenation:
  <asp:Label
  id="lblConcat"
  runat="server"/>
  
  <br/>
  
  <asp:Label
  id="lblConcatString"
  runat="server"/>
  
  <br/>
  <br/>
  
  StringBuilder:
  <asp:Label
  id="lblBuild"
  runat="server"/>
  
  <br/>
  
  <asp:Label
  id="lblBuildString"
  runat="server"/>
  
  </form>
  </body>
  </html>
  二种方式的差别是相当大的:使用StringBuilder类的Append方法的速度比使用字符串连接的速度快近200倍。比较的结果如下所示:
  (图:picture01)
  
  
  5、只在必要时使用服务器端控件
  
  ASP.NET中新引入了一种在服务器端运行的被称作Web Server Controls的控件,在代码中,它们经常通过下面的语法被说明:
  
  <asp:TextBox id="txtLastName" size="40" runat="server" />
  它们有时也被称作ASP控件。服务器端控件是由runat属性指示的,它的值总是“server”。
  通过添加runat属性,一般的HTML控件可以被很方便地转换到服务器端运行,下面是一个简单的例子:
  
  <input type="text" id="txtLastName" size="40" runat="server" />
  可以通过id属性中指定的名字,我们可以引用程序中的控件,可以通过编程的方式设置属性和获得值,因此,服务器端处理方式有较大的灵活性。
  
  这种灵活性是有一定代价的。每种服务器端控件都会消耗服务器上的资源。另外,除非控件、网页或应用程序明确地禁止view state,控件的状态是包含在view state的隐藏域中,并在每次回送中都会被传递,这会引起严重的性能下降。
  在这方面的一个很好的例子是,网页上控件表格的应用,如果不需要在代码中引用表格中的元素,则使用无需进行服务器端处理的HTML表格。我们仍然可以在HTML表格单元中放置服务器控件,并在代码中引用服务器控件。如果需要引用任意的表格元素,例如指定的单元,则整个表格必须是服务器控件。

6. HyperLink控件、LinkButton控件的差别
  
  对于Web访问者而言,HyperLink、LinkButton控件是一样的,但它们在功能方面仍然有较大的差异。
  当用户点击控件时,HyperLink控件会立即将用户“导航”到目标URL,表件不会回送到服务器上。LinkButton控件则首先将表件发回到服务器,然后将用户导航到目标URL。如果在“到达”目标URL之前需要进行服务器端处理,则使用LinkButton控件;如果无需进行服务器端处理,则可以使用HyperLink控件。
  
  
  7、注释代码
  
  这一技巧并不是针对ASP.NET的,但它是一个良好的编程习惯。
  注释不仅仅应当说明代码会执行什么操作,还应当注明原因。例如,不要仅仅在注释中说明是在遍历数组,而是要说明遍历数组是根据某一算法计算一个值,除非算法是相当简单的,否则还应当对算法进行简要的说明。
  .NET工程中的不同的编程语言都有各自不同的注释符号,下面是一个简要的说明:
  HTML <!-- 注释 -->
  JavaScript // 注释
  VBScript ' 注释
  VB.NET ' 注释
  C# // 注释
  /* 多行内容
  的注释
  */
  SQL -- 注释
  
  在服务器控件的开始和结束标记中没有注释符号,但服务器能够忽略掉所有它不能识别的属性,因此我们能够通过使用没有定义的属性来插入注释。下面是一个例子:
  
  <asp:TextBox
  id="txtLastName"
  size="40"
  comment="这是我的注释"
  runat="server" />
  在Visual Studio .NET中对源代码进行注释非常简单。高亮度显示需要注释的行,然后按Ctrl+K+C组合键添加注释。要删除注释,只需高亮度显示被注释的代码,并按下Ctrl+K+U组合键。
  在C#工程中,我们还可以通过在每行的开始处使用///输入XML注释小节。在注释小节中,我们可以使用下面的XML标记组织注释:
  <summary></summary>
  <remarks></remarks >
  <param></param>
  <returns></returns>
  <newpara></newpara>
  要在Visual Studio .NET中查看这些XML注释的格式化的报告,我们可以首先选择“工具”菜单项,然后选择“建立注释Web网页”菜单项。
  
  
  8、使用trace方法和trace属性记录Page目录中网页的执行情况
  
  调试程序的一种古老的技术是在程序中的关健点插入输出语句,通常情况下,输出信息中会包含重要变量的值,相关信息可以输出到屏幕、日志文件或者数据库。

ASP .NET 开发-----------相关推荐

  1. 《ASP.NET 开发从入门到精通》----2.3 编译和部署ASP.NET程序

    本节书摘来自异步社区<ASP.NET 开发从入门到精通>一书中的第2章,第2.3节,著 张明星 ,责任编辑 张 涛, 更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  2. 用 ASP.NET 开发 Web 服务的五则技巧

    (转的,作者不详) 一.禁用HTTP POST/GET协议 除非另外指定,否则,.NET将试图把Web服务绑定到三种协议:HTTP/POST.HTTP/GET和SOAP.之所以说"试图&qu ...

  3. ASP.NET开发要抛弃ASP旧习和破烂

    ASP.NET开发要抛弃ASP旧习和破烂 使用ASP没有错,只要适用够用就行了.但是在用ASP.NET开发网站或系统的时候,应该抛弃开发ASP时形成的习惯,用ASP.NET的方法去开发,而不是在ASP ...

  4. ASP.NET-FineUI开发实践-9(四)

    现在是这么个问题,在开发中表格是动态出来的,就是标准板是全部字段列出,客户要根据情况列出自己想要的,在增加操作页面的同时要是能用前台自带的功能直接保存到后台就好了,现在的列显示和隐藏是不回发的. 1. ...

  5. server 2008 IIS 7下asp.net开发环境部署及配置

    前面两篇讲了系统安装及server2008的基本设置,现在进行asp.net开发网站项目实例详解. 1,打开visual studio 2008,新建网站,刚开始选择.net2.0吧(因为现在支持.n ...

  6. ASP.NET开发,从二层至三层,至面向对象 (4)

    继续上一篇<ASP.NET开发,从二层至三层,至面向对象 (3)>http://www.cnblogs.com/insus/p/3826706.html .我们更深层次学会了逻辑层对象,即 ...

  7. asp.net开发 网络硬盘[转贴+删节]

    asp.net开发 网络硬盘[转贴+删节] asp.net开发网络硬盘    文件传输常用方式: ftp(太过复杂), emai(不够安全), 网上邻居(范围有限).这3中方式主要都是面向点对点的. ...

  8. 【ASP.NET开发】.NET三层架构简单解析

    这篇文章本来应该很早就写出来的,但是一直苦于自己的精神能力有限,而且已经到了我们学校的考试周,所以时间上还是有点紧迫.关键的一点就是,找不到合理的思路来写,思路没有的话,就算是再好的素材,也写不来大家 ...

  9. 在进行 ASP.NET 开发时,有时候需要对页面输出的最终 HTML 源代码进行控制

    在进行 ASP.NET 开发时,有时候需要对页面输出的最终 HTML 源代码进行控制,是页面的 render 方法中很容易实现这个功能.下面就是一个实现的方法,注释都在代码中. [c-sharp] v ...

  10. 第一节:ASP.NET开发环境配置

    第一节:ASP.NET开发环境配置 什么是ASP.NET,学这个可以做什么,学习这些有什么内容? ASP.NET是微软公司推出的WEB开发技术. 2002年,推出第一个版本,先后推出ASP.NET2. ...

最新文章

  1. 计算机科班学习 OS 的正确姿势!
  2. 纯CSS3实现轮播图
  3. php常量变量连接,PHP常量及变量区别原理详解
  4. Django运维后台的搭建之四:用bootstrap模板让运维前台变得更漂亮
  5. Python数据分析Numpy库方法简介(一)
  6. 将集合类转换成DataTable
  7. android xml 指纹动画,Android 指纹识别(给应用添加指纹解锁)
  8. ubuntu安装nvidia显卡驱动
  9. 漫话:什么是架构师?
  10. python读文件的方法open,file,with open
  11. java微博自动转发_被「李笑来老师」拉黑之「JavaScript微博自动转发的脚本」
  12. HTML页面基本结构浅谈
  13. 题解【[FJOI2018]所罗门王的宝藏】
  14. 点云纹理映射 matlab,Spherical Texture Mapping Method for Large-scale Point Cloud Data
  15. 超过1M的网络动图添加到微信表情包
  16. 用户注册及APP使用隐私协议
  17. 耳机插入听不到声音或者对方听不见你说话问题
  18. 人工智能必看论文系列推荐(含神经网络,计算机视觉,AI,深度学习共计四十余篇)
  19. Resource Acquisition Is Initialization
  20. 如何让开源项目成为你的良师益友

热门文章

  1. 电脑安装有WPS和OFFICE时,将office设置为默认打开软件
  2. js实现手机拨号功能
  3. 面向对象:一起改bug,一起嘻嘻哈哈,快乐的人生你我共享!
  4. 三星推出硬盘960 Evo SSD 读取速度达3200MB/s
  5. linux系统访问bitlocker分区,我将系统盘启用Bitlocker时,系统提示:“系统找不到指定的文件件”...
  6. 阿里云linux服务器重装系统后,通过快照找回服务器数据
  7. vivado实现SDI接口
  8. 从创新到主流选择,英特尔傲腾为用户输出了更多价值
  9. 局域网限制网速软件_智能电视本地视频播放软件有哪些?【沙发管家】为你推荐!...
  10. 基于有限状态机实现敏感词替换(Java)