ASP.NET 2.0 中收集的小功能点

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

为ASP.NET 2.0配置数据源 
在ASP.NET 2.0中提供了大量的Provider,以及Master Page、Theme/Skin等新技术,而这些技术都需要有一个数据库的支持。而ASP.NET 2.0默认的是采用SQL Express,在实际开发中我们用的最多的还是Sql Server,因为我们要进行一定的配置。
下面简要叙述在ASP.NET 2.0中使用SQL Server 2K/2K5做支持数据库的步骤:

  1. 在Visuaol Studio 2005的命令行环境中执行命令:aspnet_regsql。该工具可以为ASP.NET 2.0在指定的SQL Server上建立或指定一个支持数据库,默认名字为aspnetdb
  2. 接下来需要修改配置文件,可以在通过修改$:WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config来实现,但修改machine.config文件并不是一个好的方法,好在ASP.NET 2.0提供了在Web.Config文件中修改的办法。
  3. 打开一个Web应用程序的Web.Config文件,添加如下配置节:
    < connectionStrings >
        
    < remove  name ="LocalSqlServer"   />
        
    < add  name ="LocalSqlServer"  connectionString ="server=(local);trusted_connection=false;user id=sa;pwd=8848;database=aspnetdb"  providerName ="System.Data.SqlClient"   />
    </ connectionStrings >

    首先用remove去掉在machine.config中定义的LocalSqlSever连接配置,那个连接是指向本地安装的Sql Express的;然后再重新添加一个LocalSqlServer数据库连接指向想要设定的Sql Server服务器数据库。
  4. 然后在<system.web>节点中去配置一个默认的使用LocalSqlServer数据连接的Provider,如下:
    < system .web >
        
    < membership  defaultProvider ="SqlMembershipProvider" >
          
    < providers >
            
    < add  connectionStringName ="LocalSqlServer"  name ="SqlMembershipProvider"  type ="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
          
    </ providers >
        
    </ membership >
    </ system.web >

  5. 这样配置文件就OK了。可以通过在VS中点击Web Site菜单下的ASP.NET配置来进行测试是否已经成功。



VS 2005 现在对Web.config文件也支持智能感知(intellisense)了:

如果你的智能感知没出来,可能是因为名称空间的关系: 
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"

只要把上面这句改为: 
<configuration> 

智能感知就可以出来了。


ADO.NET 2.0 中的ConnectionStringBuilder

对于所有开发人员来说,写连接字符串永远不是一件困难的事,但却是一件很头痛的事情。

看ADO.NET 2.0如何解决的
SqlConnectionStringBuilder connbuilder  =   new  SqlConnectionStringBuilder();
connbuilder.DataSource 
=   " localhost " ;
connbuilder.UserID 
=   " someuser " ;
connbuilder.Password 
=   " somepassword " ;
SqlConnection c 
=   new  SqlConnection (connbuilder.ConnectionString);
c.Open();

它至少解决了下面几个问题
1、不用因为记不住种类繁多的连接字符串而烦恼了.。
2、绝对不会写错连接字符串

1.asp.net 2.0中的MaxPageStateFieldLength 属性 
  在asp.net 2.0中,可以强制对viewstate进行分段传输了,使用的是Page.MaxPageStateFieldLength 属性,可以设置viewstate中,每个页面状态字段的最大字节数。格式如下,要在WEB.CONFIG文件里设置的:
    <pages maxPageStateFieldLength="5" />
    其中,将设置把viewstate为不超过5字节,如果实际的viewstate超过该值,将进行分段传输,但每个分段的大小依然不超过maxPageStateFieldLength中的设置值, 默认设置值为-1,表示不对其进行分段传输。
2.Click button only once in asp.net 2.0 
protected void Page_Load(object sender, EventArgs e)
 2     {
 3         PostBackOptions options = new PostBackOptions(Button1,string.Empty);
 4 
 5         StringBuilder sb = new StringBuilder();
 6         if (Button1.CausesValidation && this.GetValidators(Button1.ValidationGroup).Count > 0)
 7         {
 8             options.ClientSubmit = true;
 9             options.PerformValidation = true;
10             options.ValidationGroup = Button1.ValidationGroup;
11 
12             sb.Append("if (typeof(Page_ClientValidate) == 'function')");
13             sb.Append("if(Page_ClientValidate(\"" + Button1.ValidationGroup + "\")==false) return false;");
14         }
15         if (!string.IsNullOrEmpty(Button1.PostBackUrl))
16             options.ActionUrl = HttpUtility.UrlPathEncode(Button1.ResolveClientUrl(Button1.PostBackUrl));
17         
18         sb.Append("this.disabled = true;");
19         sb.Append(ClientScript.GetPostBackEventReference(options));
20         sb.Append(";");
21         Button1.Attributes.Add("onclick", sb.ToString());
22     }
3.asp.net 2.0中得到sqldatasource返回的行数 
在asp.net 2.0中,gridview是和sqldatasource控件绑定的,那么如何得到sqldatasource返回的记录的行数呢?比如sqldatasource控件中用select * from ....,如何返回其记录行数?在.net 2.0中,可以通过sqldatasource的OnSelected事件实现,并且对select事件SqlDataSourceStatusEventArgs参数中的AffectedRows属性设置一下就可以了,具体核心代码如下:
 protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
 {
   totalRows.Text = e.AffectedRows.ToString();
 }
  <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=(local);Initial Catalog=Northwind;user id=sa;password=123456;"  ProviderName="System.Data.SqlClient" SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName] FROM [Customers]" OnSelected="SqlDataSource1_Selected"></asp:SqlDataSource>
 
4.在asp.net 1.1中,当要在page_load页面中,设置某个控件为默认的焦点按钮(也就是默认焦点是在这个控件上的),可能要用到javascript的代码,而在ASP.NET 2.0中,不用这些麻烦了,在form代码中,使用 
  defaultbutton  defaultfocus属性就可以了,比如 
 <form id="Form1"

    defaultbutton="BtnSubmit"

    defaultfocus="TextBox1"

    runat="server"> 
则在页面加载时,默认的button按钮时btnsubmit,焦点默认就在texbox1上了
 
5.asp.net 2.0中的弹出对话框

在asp.net 1.1中,要做1个弹出的对话框的话,一般是在服务端的代码中这样写: 

btnClick.Attributes.Add("onclick", "return confirm('Are you sure?');"); 

现在在ASP.NET 2.0中,只要使用客户端的代码就可以拉,新多了个onclientclick,这样写 
<asp:button id="btnClick" runat="server" OnClientClick="return confirm('Are you sure?');" text="Button"></asp:button
5.自定义的页面控件, 
比如在ASP。NET 1。1中,要声明自定义的页面控件, 
通常要在用到的每页都要加入register prefix=........这样的,很麻烦,而在asp.net 2.0中,如果你确定一个页面自定义控件要在 
整个项目中用到,只需要在WEB.CONFIG中加入 
<system.web> 
    <pages>

 

    <controls>

      <add tagPrefix="prefixname" namespace="namespacename "/>

    </controls>

   </pages>

</system.web> 
其中prefixname为控件的标识,namespace为命名空间就可以了。 

 
在VS2005中,你会发现DataFormatString不起作用了。

        这时候,应该同时设置HtmlEncode为false,DataFormatString才会起作用:

       

< asp:BoundField  HeaderText ="DisplayText"  DataField ="FieldName"  DataFormatString ="{0:F2}"  HtmlEncode ="false" >
    
< ItemStyle  HorizontalAlign ="Right"  Width ="60px" ></ ItemStyle >
    
< HeaderStyle  HorizontalAlign ="Right" ></ HeaderStyle >
</ asp:BoundField >

 

关于asp.net个性化站点的设置
在sql2005种默认将数据库设成sql express的,如果要设置到其它的数据库如sql2000需要如下设置:
在机器上按此路径:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe,找到aspnet_regsql.exe,然后运行,再按照相应的步骤,在项目所属的数据库里建好个性化部点应该有的表(sql server2000),如下图:


这一步,其实就是不用项目里的appData\aspnetdb.mdf存储数据,而是转到sql server中去。当然,要在web.config里加个配置节,说明项目是指向那个数据库的。配置节的意思,大家看看就会明白的了。

< connectionStrings >
< clear  />
< add  name ="LocalSqlServer"  connectionString =
"server=.;integrated security=sspi;database=aspnetdb"
/>
</ connectionStrings >

TreeView的无刷新页面展开子节点: 
设置Treeview的EnableClientScript和PopulateNodesFromClient的属性设为"True",并在OnTreeNodePopulate事件代码中为该节点添加子节点。

< asp:TreeView  ID ="TreeView1"  EnableClientScript ="true"  PopulateNodesFromClient ="true"  OnTreeNodePopulate ="TreeView1_TreeNodePopulated"  runat ="server"   >  
</ asp:TreeView >

 


     protected   void  TreeView1_TreeNodePopulated( object  sender, TreeNodeEventArgs e) 
    

        TreeNode currentNode 
= e.Node; 
 
        
// 这里为currentNode添加子节点 
    }

 

在服务器端代码中设置页面的缺省控件和缺省按钮: 
asp.net 2.0的Page类增加了“Form”属性,设置Page.Form.DefaultButton和DefaultFocus为缺省按钮(输入控件)的UniqueID即可。

void  Page_Init( object  sender, EventArgs e) 

    
this .Page.Form.DefaultFocus  =  TextBox1.UniqueID; 
    
this .Page.Form.DefaultButton  =  Button1.UniqueID; 

1\掩藏字段的处理:DataGrid可以将字段直接设置为Visible=false,可以通过Cell[x].Text取到值。 GridView这个功能失效了,可以使用运行时来设定该列为掩藏。处理RowDataBound事件。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
   e.Row.Cells[5].Visible = false;
}
   2\ 获取所选列的数据:DataGrid可以直接通过所选行来获取,GridView同样的代码无法运行。GridView 可以通过GridViewRow来获取。BtnAudit是模版列中的按钮。
GridViewRow grdRow = (GridViewRow)btnAudit.Parent.Parent;

 string strId = grdRow.Cells[0].Text;
 string memberId = grdRow.Cells[5].Text;
  3\ 最终删除一条数据之前进行确认,这个可以使用摸版列,在摸版列中放置按钮控件,其中有一个客户端事件onclientclick,这里可以写确认处理javascript脚本.例如:
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Button ID="btnRefuse" runat="server" OnClick="btnRefuse_Click" Text="拒绝"  OnClientClick="return confirm(' 你真的要拒绝这个用户加入俱乐部?')"/>
                </ItemTemplate>
            </asp:TemplateField>

按钮提交后变为灰色
前台:
function Button1_onclick(b) {
b.disabled = true;
b.value = '正在提交,请稍侯';

}
后台
btn.OnClientClick = "javascript:void(0);this.disabled=true;this.value = '正在提交,请稍侯';__doPostBack('" + btn.ClientID.Replace('_', '$') + "','')";

0
0
« 上一篇: ASP.NET 2.0页面框架的几点新功能
» 下一篇: 常用js函数 
posted on  2005-11-18 14:19  高海东 阅读( 3433) 评论( 4编辑  收藏

评论

#1楼   2005-11-26 21:13  SQnote·www.SQnote.cn   

自定义的页面控件,只要在web.config中声明的方式不错:)
  

#2楼   2006-08-05 16:47  RedVesper
2\ 获取所选列的数据:DataGrid可以直接通过所选行来获取,GridView同样的代码无法运行。GridView 可以通过GridViewRow来获取。BtnAudit是模版列中的按钮。 
GridViewRow grdRow = (GridViewRow)btnAudit.Parent.Parent; 

string strId = grdRow.Cells[0].Text; 
string memberId = grdRow.Cells[5].Text; 

你测试过吗??
  

#3楼 [ 楼主2006-08-05 17:11  高海东   
@RedVesper 
不好意思,没有测试
  

#4楼 [ 楼主2009-12-29 10:37  高海东   
选择TreeView节点,页面回送刷新后,滚动条自动回到TreeView顶部,而不是被选中节点处,使节点在Treeview可视区域可见,可以利用scrollIntoView方法使TreeView中页面刷新后自动定位到被选择节点处,使被选择节点可见,方法如下:

<!--Treeview定义页面-->
<body onload="ScrollToSelectNode();">
。。。。。。
<div id="divScroll" style="overflow-y:auto;overflow-x:auto;WIDTH: 250px;height:400px;">
<asp:TreeView ID="tvAssetKind" runat="server" Width="100%" ExpandDepth="1">
</asp:TreeView>
</div>
。。。。。。
</body>

<!--JS处理方法-->
<script language="javascript" type="text/javascript"> 
//滚动到选择节点
function ScrollToSelectNode()
{
try
{
var elem = document.getElementById('tvAssetKind_SelectedNode');
if(elem != null )
{
var node = document.getElementById(elem.value);
if(node != null)
{
//滚动被选择节点到TreeView顶部
node.scrollIntoView();

//使被选择节点距离TreeView顶部10,使被选择节点可见
document.getElementById("divScroll").scrollLeft = 0;
document.getElementById("divScroll").scrollTop -= 10;
}
}
}
catch(oException)
{
}

</script> 

scrollTop、scrollLeft、scrollWidth、scrollHeight

scrollTop 是“卷”起来的高度值,示例:

<div style="width:100px;height:100px;background-color:#FF0000;overflow:hidden;" id="p">
<div style="width:50px;height:300px;background-color:#0000FF;" id="t">
如果为 p 设置了 scrollTop,这些内容可能不会完全显示。
</div>
</div>

<script type="text/javascript">
var p = document.getElementById("p");
p.scrollTop = 10;
</script>

由于为外层元素 p 设置了 scrollTop,所以内层元素会向上卷。
scrollLeft 也是类似道理。
我们已经知道 offsetHeight 是自身元素的宽度。
而 scrollHeight 是内部元素的绝对宽度,包含内部元素的隐藏的部分。
上述中 p 的 scrollHeight 为 300,而 p 的 offsetHeight 为 100。
scrollWidth 也是类似道理。



本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/11/18/279583.html,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
6月前
|
存储 文字识别 C#
.NET开源免费、功能强大的 Windows 截图录屏神器
今天大姚给大家分享一款.NET开源免费(基于GPL3.0开源协议)、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器:ShareX。
108 1
|
3月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
107 4
|
8天前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
21天前
|
开发框架 .NET 开发工具
.NET 9 中 LINQ 新增的功能
.NET 9 中 LINQ 新增的功能
|
6月前
|
定位技术 API C#
.NET开源、功能强大、跨平台的图表库
.NET开源、功能强大、跨平台的图表库
|
3月前
|
开发框架 JavaScript 前端开发
提升生产力:8个.NET开源且功能强大的快速开发框架
提升生产力:8个.NET开源且功能强大的快速开发框架
|
3月前
|
Unix Linux C#
增强用户体验:2个功能强大的.NET控制台应用帮助库
增强用户体验:2个功能强大的.NET控制台应用帮助库
|
3月前
|
设计模式 前端开发 数据可视化
LiveCharts2:简单灵活交互式且功能强大的.NET图表库
LiveCharts2:简单灵活交互式且功能强大的.NET图表库
59 0
|
5月前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
|
4月前
|
C# 开发者 Windows
4款.NET开源、功能强大的Windows桌面工具箱
4款.NET开源、功能强大的Windows桌面工具箱