[积累]ASP.NET开发经验积累

                                            想到什么写什么,看到什么抄什么先吧。哈哈

在开发过程中,通过摸索查资料,收集了一些值得提出来的经验:

a)      相对于原来的for语句foreach具有更好的执行效率,foreach的平均花费时间只有for30%。通过测试结果在forforeach都可以使用的情况下,我们推荐使用效率更高的foreach。另外, for写入数据时间大约是读取数据时间的10倍左右;

b)      asp.net程序中,使用sa账号的是一种非常不安全的做法,它具有在数据库上执行任何操作的权限。黑客可以调用类似于xp_cmdshell这样的扩展存储过程进行攻击;

c)      在处理数据交互的时候,尽量将组织SQL语句的处理放到中间层(比如专门的数据操作类、存储过程等),这是防止注入式攻击的有效方法;

d)      避免到服务器的不必要的往返过程。使用 Page.IsPostBack 避免对往返过程执行不必要的处理;

e)      一定要禁用调试模式;

f)        一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用DatSet比较合适.SqlDataReaderDataSet的选择取决于程序功能的实现;

g)      数据绑定建议使用<%# ctype(Container.DataItem,DataRowView).Row("字段名") %>。数据量大的时候可提高几百倍的速度;

以上摘自

hedonister的专栏的    Web开发学习体会

++

*javascript打印控制

1。按钮不能放在<from runat="server">中

2。document.all("printbtn").style.visibility = 'hidden';//打印时隐藏打印按钮
<div id="printbtn"><input name="idPrint" type="button" value="打印" οnclick="doprint()"></div>

3。<OBJECT id="factory" style="DISPLAY: none" codeBase="ScriptX.cab#Version=5,0,4,185" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext>
  </OBJECT>


4。这里需要给出ActiveX ScriptX.cab的地址,你可以下载到自己的网站中并提供出来,也可以引用其他网站的。当用户访问该网页时,将自动判断该浏览器是否已装有,没有的话,弹出下载警告。同意下载之后,就可以了。

5。
factory.printing.topMargin="6";//存在最小默认值5.02
      factory.printing.bottomMargin="6";//存在最小默认值4.13
      factory.printing.leftMargin="2";//存在最小默认值5.08
      factory.printing.rightMargin="2";//存在最小默认值6.79

 

*DataGrid的表头其实就是html写的,所以可以通过覆盖html语句的方法来随意改变DataGrid的表头。html table能写成什么样子,他就可以变得怎么样。多行多列合并单元格制定样式……

*对服务器上的文件进行写操作,需要特别指定

1。IIS的匿名登陆角色:指定一个具有写权限的角色

2。web.config中指明登陆形式  

    <identity impersonate="true"/>
    <authentication mode="Windows" />

*通过=((TextBox)E.Item.FindControl("txtDateTD")).Text来获取控件,不只是在DataGrid中,以后要多加利用。

*利用

e.Item.Cells[0].Attributes.Add("onclick", "return confirm('删除么?')");来添加javascript的确认框。

*哪里都可以添加正则表达式来做验证

<asp:TemplateColumn>
    <HeaderTemplate>年月日</HeaderTemplate>
    <ItemTemplate><%# DataBinder.Eval(Container,"DataItem.TD_Time","{0:d}")%></ItemTemplate>
    <EditItemTemplate><asp:RegularExpressionValidator Runat=server ControlToValidate="txtDateTD"
         ErrorMessage="日期" ValidationExpression="(/d{4}|/d{2})//d/d?//d/d?"/>
    <asp:TextBox Runat=server ID="txtDateTD"></asp:TextBox>
    </EditItemTemplate></asp:TemplateColumn>


*

正反排序
  protected static string SortExp;//排序用
  protected void Sort_Grid(object sender, DataGridSortCommandEventArgs e)
  {
   if(SortExp==e.SortExpression)
    SortExp+=" DESC";
   else
    SortExp= e.SortExpression;
   BindGrid();
  }

*

通过Session.Abandon(); 调用Global的Session_End事件,同时在该事件中,结束自己的登陆状态

  protected void Session_End(Object sender, EventArgs e)
  {
   Application.Lock();
   Application.Remove(Session.SessionID.ToString());
   Application["OL_UserCount"]=(int)Application["OL_UserCount"]-1;
   Application.UnLock();
  }

*repeater比DataGrid更自由
在windows 2003下安装了VS2003,在运行web应用程序的时候出现一下错误:对路径“D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/test/db58b339/50f84c0”的访问被拒绝。
 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.UnauthorizedAccessException: 对路径“D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/test/db58b339/50f84c0”的访问被拒绝。

ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}/ASPNET,在 IIS
6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。

由于在iis 6.0中,默认的应用程序池中的标示用的是Network Service,所以在进程中是使用Network Service这个帐号运行来运行w3wp.exe进程,而当我们在运行VS 2003的时候是需要对D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary
ASP.NET Files/目录下进行读写操作的,所以看了一下该文件夹,发现没有Network Service,添加上该账号,同时选上FULL CONTROL,问题解决,但是至于为什么会产生这个问题我不大清楚,因为在安装WINDOWS 2003的时候,Network Service账号是存在于Temporary ASP.NET Files该文件夹安全列表中的。

顺便提一下,在IIS6.0中的默认应用程序池-->属性-->标示中把Net Service改成Local System该问题也可以解决。

                                                                                            徐虎的专栏


待续

  protected void Session_End(Object sender, EventArgs e)
  {
   Application.Lock();
   Application.Remove(Session.SessionID.ToString());
   Application["OL_UserCount"]=(int)Application["OL_UserCount"]-1;
   Application.UnLock();
  }

*repeater比DataGrid更自由
在windows 2003下安装了VS2003,在运行web应用程序的时候出现一下错误:对路径“D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/test/db58b339/50f84c0”的访问被拒绝。
 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.UnauthorizedAccessException: 对路径“D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/test/db58b339/50f84c0”的访问被拒绝。

ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}/ASPNET,在 IIS
6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。

由于在iis 6.0中,默认的应用程序池中的标示用的是Network Service,所以在进程中是使用Network Service这个帐号运行来运行w3wp.exe进程,而当我们在运行VS 2003的时候是需要对D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary
ASP.NET Files/目录下进行读写操作的,所以看了一下该文件夹,发现没有Network Service,添加上该账号,同时选上FULL CONTROL,问题解决,但是至于为什么会产生这个问题我不大清楚,因为在安装WINDOWS 2003的时候,Network Service账号是存在于Temporary ASP.NET Files该文件夹安全列表中的。

顺便提一下,在IIS6.0中的默认应用程序池-->属性-->标示中把Net Service改成Local System该问题也可以解决。

                                                                                            徐虎的专栏


待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值