浏览模式: 标准 | 列表分类:网站|ASP倒奶

DW+ASP.Net实战

熟悉DW开发ASP.Net:

0。导言。
  自从dreamweaverMX(下文称做DW)面世以来,就集成了UltraDev的所有功能并增强。而且MX版本的软件直接支持ASP、PHP、JSP和ASP.net的自主开发,如果你不是特别专业的.net人员,如果你偏重的是页面设计,同时你又需要原创的程序时,那我就推荐你使用功能强大的DreamWeaverMX来帮助你完成整个站点的设计。在这里,我想讲的便是,我在开发一个个人网站以后对其ASP.net的开发的一些经验,希望对2yup的朋友们有些帮助。
  说到这里有些朋友要问了,dw生成的代码可靠么?DW里面不存在Injection问题么?其实dw中的数据库项目所涉及到的服务器端的的方法属性调用都是基于Dw自行封装的dreamweaverCtrls.Dll组件,它将自动生成(部署)到项目根目录下(需要手动创建bin文件夹),方便我们调用。值得一提的是,dw里面可视化的拖拽编程模式和自带的dll中丰富的方法属性,给我们的编程带来了极大多方便,同时比asp时代有着更高的安全性;另外,从参数的使用角度上说,在自动生成的.net代码里面,已经成功地解决了Injection问题。其他的安全问题,呵呵,我反编译了他这个组件,不过还没找到BUG,呵呵~~~其他兄弟加油了~~另外,你还可以在页面中混合加入例如<script runat="server">的代码,在页面初始化时,执行以些你自定义的动作(如果多次操作数据库生成DataTable的话,有可能造成服务性能的下降哦~~)。好了,闲话不说,我们切入正题。
1。dreamweaverCtrls.Dll简介
  dreamweaverCtrls.Dll在DW_2004中的版本是1.0.0.5,将会被部署到项目根目录的bin文件夹下面。dw中丰富的方法属性,将数据链接、数据显示、数据更新、数据删除等变得简单易行,全部集成到了这里面,已备我们方便调用。比如我们要创建一个数据集,只需要声明<dataset>标签即可,然后就可以调用了~~,我们将会陆续用到:<MM:DataSet> <MM:Up&#100;ate> <MM:Del&#101;te> <MM:Ins&#101;rt>等控件。有了这些dreamweaverCtrls.dll这个组建提供的这一切,让我们数据的编程变的简单易行~~dreamweaverCtrls.dll这个组件的其他一些参数,大家可自行反编译(不果如果不是研究BUG的话没这个必要,我们只需要知道他基于数据库的用法即可) 点击这里下载这个组件。
2。DW生成站点项目  打开DW软件,在右侧操作栏里面选择“文件”-->“管理站点”-->“新建站点”[注意:这里的站点并不是所谓的IIS的站点,这里的站点指的是一个方便管理的目录,如果需要真正的将其变为一个站点,还需要在IIS里面手动建立一个IIS的虚拟目录,比如我建立的虚拟目录的名字是 “dw.net”。虚拟目录(或站点)的存在是用户DLL文件能够成功读取的前提]

  在这里我们按照自己的要求新建一个站点dw.net。偶用的是C#版本所以选择使用服务器技术、ASP.net C#
  然后下一步进入选择你的站点原文件目录,选择你的目录点击“下一步”,然后配置好用http的访问路径,我的是“http://localhost/dw.net/”  进行测试,如果弹出对话框说“URL前缀测试成功”说明一切OK,然后一路狂奔“下一步”直至“完成”。
  好的,到此为止,我们在DW中已经成功地创建了一个ASP.Net C#站点。以后我们就可以方便的在这个站点中创建我们的各种服务文件和DLL控件。
3。DW与数据库的连接
  现在我们就以ACCESS数据库来显示一个新闻数据来演示我们的数据库链接。
  创建一个news.mdb数据库 有一个news表,表里面有有id title addTime 和 content 四个字段。(数据内容自行添加)数据库存放在dw.net的根目录地下
  打开DW新建一个页面“shownews.aspx” 在dw.net根目录下
  切换到原代码试图,我们会发现DW在文件的最上端自动加注了我们文件类型的一句:<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
  接下来,要建立与数据库的连接,我们必须部署前面我们提到的“dreamweaverCtrls.dll”这个组件到dw.net根目录的bin文件夹(如果没有可以自行建立此文件夹)。然后在右侧操作栏里

面选择“应用程序”面板,然后选择“服务器行为”找到“部署”链接 并点击“部署”,找到bin文件夹,点击确定完成。这样,这个组件便被我们成功地部署到了bin文件夹中,我们可以到相应目录去浏览。
  然后,选择“插入”-->“应用程序对象”-->“数据集”。在“数据集”对话框中填写数据集的“名称”,然后定义链接,点击“定义”,然后选择“新建”-->“OLE DB链接”,填写链接的名字(我的是conn),然后再内容框里面输入链接代码,下面是我的代码
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\dw.net\news.mdb;Persist Security Info=False

然后点击“测试”如果成功,点击“确定”然后点击“完成”即可返回数据集页面,这样数据库链接即建立成功。或者在建立数据库链接的时候,可以采用OLE DB面板上的“建立标签”,让向导帮助你完成数据库的链接,而不用自己输入代码  
返回到“数据集”对话框后,在“连接”中选择我们刚刚建立的"conn",在“表格”种选择“news”,“列”我们可以简单的选择“全部”,其他的项目可以暂时不管,点击“测试”,如果成功将数据表“news”中的数据读出,那么即可以点击“确定”完成数据集的建立,那么,我们就成功地建立了数据集DataSet1。

到目前为止,我们真正的有了一些成就(又两个根本性的变化):
1。在dw.net的根目录自动已经自动生成了一个web.config配置文件,里面记录了我们的一些链接数据库的信息。我们可以用记事本打开查看,内容如下:

<configuration>
  <appSettings>
    <add key="MM_CONNECTION_HANDLER_conn" value="default_oledb.htm" />
    <add key="MM_CONNECTION_STRING_conn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\dw.net\news.mdb;Persist Security Info=False" />
    <add key="MM_CONNECTION_DATABASETYPE_conn" value="OleDb" />
    <add key="MM_CONNECTION_SCHEMA_conn" value="" />
    <add key="MM_CONNECTION_CATALOG_conn" value="" />
  </appSettings>
</configuration>


呵呵,意思很简单,大家一看就会阿~~

2。这个变化更显而易见,在操作栏的“应用程序”面板的“绑定”面板,会发现多了一个“conn”的数据集dataset1,展开数据集dataset1,会发现数据表news中的字段便在其中。这些字段将来就可以用作我们显示数据。从源代码分析,之所以会郑家这么一个数据集的试图,在源代码中增加了这么几句:

代码:
<%@ Register TagPrefix="MM" Namespace="DreamweaverCtrls" Assembly="DreamweaverCtrls,version=1.0.0.0,publicKeyToken=836f606ede05d46a,culture=neutral" %>
<MM:DataSet
id="DataSet1"
runat="Server"
IsStoredProcedure="false"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
CommandText="<%# "Sel&#101;ct * FROM news" %>"
Debug="true"
></MM:DataSet>
<MM:PageBind runat="server" PostBackBind="true" />



我来简单的解释一下这几句话:
1。Register这一句是注册“DreamweaverCtrls”这个组件,有DW自动生成。
2。MM:DataSet标签,这便是DW生成的数据表的用户控件。里面包含几个属性参数:
  ConnectionString为从web.config中创建链接字符串
  DatabaseType为数据库链接类型字符串,同样取自web.config中
  CommandText为sql字符串,就是所谓的命令字段,去执行sql查询
  Debug为错误检查, 如果设置的值为“true”当运行时有错误产生时,会产生错误的原因,而不是仅仅提示错误。
3。MM:PageBind 标签。学过.net的朋友都知道,在Page_Load()事件中往往在布什IsPostBack时,来一个DataBind()方法。这个标签实际上就是这个意思
  PostBackBind属性设为“true”后,在Page_Load()时无条件执行DataBind()。

呵呵,解释完了,最激动人心的一刻来了,让我们显示数据:
在右侧操作栏的“应用程序”面板中选择“服务器行为”标签。在上面点击“+”号,在弹出的菜单中选择“动态文本”
在谈出的对话框中选择“conn”里面的“title”然后单击确定。这样title便被添加到了页面当中。
反复这样操作,直到将三个数据都添加到页面中去。
然后调整三个数据在文中的位置,让他像一篇文章的格式,然后 呵呵 保存此文档~~
大功告成了~~~进入浏览器测试一下:http://localhost/dw.net/sh... 看看数据是否被读出?如果读出,好的,那我今天这三个小时没白写呵呵
此外,还可以直接切换到DW的“活动数据试图”进行测试,同样可以测试成功~~
在操作的过程中有几点是必须要注意的:
1。必须建立站点或者虚拟目录,否则无法运行DW自带的组件
2。必须正确部署组件:根目录的Bin文件夹中
3。数据库连接一定要正确……
当然还要注意其他一些小细节,确保文档成功~~
呵呵,总而言之,用DW来编写asp.net确实比较容易,但也不能掉以轻心,因为里面的好东东好方法还很多,还要靠你自己去慢慢理会~~呵呵

DW+ASP.Net实战(二):数据的循环显示

4。数据的循环显示。
  前一天我们说了DW与数据库的链接方法,在这里补充一下:在.net里面,数据链接住要有这么几种方式:SqlDataConnection、OleDbDataConnection、OdbcDataConnection三种,然后进行链接的构建,但在asp.net2.0例面,这些就改变了,连数据链接只需要标注一个控件即可完成,很是简单,呵呵,我发现微软公司要把我们程序员培养成纯粹的思维机器人了哈哈)。

SqlDataConnection是sqlServer专用的,OleDbDataConnection是通用的,呵呵, 不过如果是sql server的话,用OleDbDataConnection效率会受影响哦~~,那Odbc我就不说了,呼呼
  我们在这里用的就是比较通用的OleDbDataConnection来链接数据库,它既可以显示ACCESS数据库又可以链接SqlServer数据库,对应的代码如下:
  For Access:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\dw.net\news.mdb;Persist Security Info=False

For MS SqlServer
PROVIDER=SQLOLEDB;DATA SOURCE=(local);UID=sa;PWD=;DATABASE=hotide;connect timeout=120;

  嗯,然后再按照前一天的东东就可以随心所欲链接拉,呵呵  现在,让我们开始说说循环显示数据。
  在.net面,最牛X的数据显示控件就可以说是DataGrid了。只要一个标签,和一些属性,数据就可以让你为所欲为。另外还有的主要控件就是DataList和Repeater了。按照效率来比较:DataGrid>DataList>Repeater,但是在方便程度上讲 这三个控件有时候又可以反过来排序,因为Repeater控件的逻辑往往和以前的ASP3.0中的do……while循环显示有很大的雷同之处,方便我们的思维。
  还是利用前一天的数据 还是利用前一天的文件。让我们来分别演示这三种方法:
  <1>。DataGrid
    让我们首先将昨天在showNews.aspx中添加的三个动态数据删除掉,做好准备。然后在右侧的操作栏里面选择“服务器行为”面板,然后选择“+”号。在弹出的对话框中选择“数据网格”,然后会弹出“数据网格”对话框。
    ID保持默认即可;数据集选择我们昨天建立的“DataSet1”;显示数据方式你可以自由选择,比如说显示所有记录和或者分页显示数据,在这里我们选择每页显示10条记录,导航选择“编号链接到每一页”;在列中可以添加或者删除你需要或者不需要的列,还可以调整每一列的格式,编辑标题的名字等等!在这里我们简便起见保持默认,然后单击“确定”完成DataGrid1的部署,这样一个DataGrid控件就被部署到了叶面上。我们可以在源代码里看到:
<form runat="server">
  <asp:DataGrid id="DataGrid1"
  runat="server"
  AllowSorting="False"
  AutoGenerateColumns="false"
  CellPadding="3"
  CellSpacing="0"
  ShowFooter="false"
  ShowHeader="true"
  DataSource="<%# DataSet1.DefaultView %>"
  PagerStyle-Mode="NumericPages"
  AllowPaging="true"
  AllowCustomPaging="true"
  PageSize="<%# DataSet1.PageSize %>"
  VirtualItemCount="<%# DataSet1.RecordCount %>"
  OnPageIndexChanged="DataSet1.OnDataGridPageIndexChanged"
>
    <HeaderStyle HorizontalAlign="center" BackColor="#E8EBFD" ForeColor="#3D3DB6" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Bold="true" Font-Size="smaller" />
    <ItemStyle BackColor="#F2F2F2" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Size="smaller" />
    <Alt&#101;rnatingItemStyle BackColor="#E5E5E5" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Size="smaller" />
    <FooterStyle HorizontalAlign="center" BackColor="#E8EBFD" ForeColor="#3D3DB6" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Bold="true" Font-Size="smaller" />
    <PagerStyle BackColor="white" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Size="smaller" />
    <Columns>
    <asp:BoundColumn DataField="title"
        HeaderText="title"
        ReadOnly="true"
        Visible="True"/>
    <asp:BoundColumn DataField="content"
        HeaderText="content"
        ReadOnly="true"
        Visible="True"/>
    <asp:BoundColumn DataField="addTime"
        HeaderText="addTime"
        ReadOnly="true"
        Visible="True"/>
    </Columns>
  </asp:DataGrid>
</form>


代码读起来并不困难,而且都是DW自动生成的代码,我不再解释,大家自己研究阿
然后在浏览器里面预览一下,呵呵,数据被显示出来了吧  

  <2>。DataList
    让我们首先将刚刚在showNews.aspx中添加的DataGrid1控件删除掉,做好准备。然后在右侧的操作栏里面选择“服务器行为”面板,然后选择“+”号。在弹出的对话框中选择“数据列表”,然后会弹出“数据网格”对话框。
    ID保持默认即可;数据集选择我们昨天建立的“DataList1”;显示数据方式我们选择显示10条记录,分别单击页眉、项目(其他的我们省略不写)并相应的“将数据字段添加到内容”在选择“页眉”后在“内容”中输入“新闻列表”;在选择“项目”后在“内容”中输入“<%# DataSet1.FieldValue("title", Container) %><%# DataSet1.FieldValue("addTime", Container) %>”(当然可以通过“将数据字段添加到内容”选项帮助我们自动添加)“组织项”我们简便起见保持默认,然后单击“确定”完成DataSet1的部署,这样一个DataSet控件就被部署到了叶面上。我们可以在源代码里看到:
<form runat="server">
  <asp:DataList id="DataList1"
runat="server"
RepeatColumns="1"
RepeatDirection="Vertical"
RepeatLayout="Flow"
DataSource="<%# DataSet1.DefaultView %>" >
    <HeaderTemplate>新闻列表 </HeaderTemplate>
    <ItemTemplate><%# DataSet1.FieldValue("title", Container) %> <%# DataSet1.FieldValue("addTime", Container) %> </ItemTemplate>
  </asp:DataList>
</form>

  
恩,乍看起来,这个比DataGrid东西少,呵呵就是,不过不要掉以轻心哦,里面还有好多深奥的东东呢!
让我们赶紧浏览一下数据吧,怎么样?是不是有了网站“新闻列表”的风格了,呵呵。
说到这里,是不是有点累了?不过千万别打瞌睡,好戏就要上演了,让我们仔细研究一下这个“Repeater”控件 ;

  <3>。Repeater
    没有接触过.net的朋友听了上面两个控件肯定有点迷茫,但Repeater就不一样了!在说Repeater以前,让我们一起回忆一下在以前的ASP中我们如何来显示循环的数据:
<%
  ""--Code designed by ReTech_DDP_Soft : zidone chang  For ASP3.0
  ""--前面需要创建记录集rs
  while not rs.eof
    Response.Write(rs("title")&amp;"&amp;nbsp;&amp;nbs;"&amp;rs("addTime"))
    rs.MoveNext
  wend
%>


  显示数据的精华是: 只要不到记录集的Eof那么我们将不断的用while循环去读取数据记录,从而显示。
  而在ASP.net Repeater控件中,我们仿佛也看到了这种模式的影子:

<ASP:Repeater runat="server" DataSource="<%# DataSet1.DefaultView %>">
  <ItemTemplate><%# DataSet1.FieldValue("title", Container) %><%# DataSet1.FieldValue("addTime", Container) %><br>
  </ItemTemplate>
</ASP:Repeater>



  1> DataSource属性给我们定义了使用哪个数据集,就像ASP中我们定义rs数据集(rs.Open sql,conn,1,1)一样
  2> <ASP:Repeater runat="server" DataSource="<%# DataSet1.DefaultView%>">这句话,看起来好像就是ASP中的<%while not rs.eof%>这句话。
  3> </ASP:Repeater>这句话好像就是 在ASP中的<%rs.MoveNext:wend%>
  4> <ItemTemplate></ItemTemplate>之间我们就可以来写需要重复显示的东西啦~~~就像ASP里面的:<%Response.Write("xxxxx")%>一样,里面可以放置任何形式的HTML代码~~
  5> 不知道大家有没有注意到<%# DataSet1.FieldValue("title", Container) %>这个代码,好像似曾相识吧!呵呵,就是的,前一天中我们的显示数据库内容中用到的“动态文本”概念,
也就是DataSet1的一个字段值,并将其显示出来~~,开动脑筋~~想一想哦~是不是就像在ASP中的<%=Rs("title")%>呢~~~
  呵呵,说到这里是不是有点感觉了~~

  下面我们就动手亲自来操作一下:
  1> “在服务器行为”面板,选择“+”号,在弹出的对话框中选择“动态文本”然后分别将“id”“title”和“addTime”三个字段添加进叶面。好的确定。在叶面addTime字段的后面添加一个水平线,用来数据换行,然后选中要重复的区域(要把水平线一起选中,否则重复的数据将会在一行中全部显示出来)然后再点击服务器行为面板的“+”号,选择“重复区域”,选择“数据集”为“DataSet1”显示“10”条数据,然后确定。保存文档。进行浏览器中预览!
  2> 这就是用Repeater进行数据循环显示的方法,当前状态可以显示10条,当然你需要更改<ItemTemplate>中的代码,让叶面显得更好看~~~
  3> 若数据不能正常输出,注意下面可能的原因:选择重复区域时,注意DataSet的名字一定要选对(对应多DataSet时);还要注意点击“重复区域”前,一定要确保已经选定了要进行重复的内容,切忌哦~~;还有其他的,大家自己去总结吧~~

  总结一下:我们今天说了3种重复区域的方式~~DataGrid、DataList、Repeater。我们比较一下:
  ( a ) 三者DataGrid最好,所支持的属性方法也最丰富,缺点就是深入掌握他们的一些用法比较困难;
  ( b ) DataList处于中间地位,主要用于显示列表,知识一种方法而已,微软的一些官方教程用DataList比较多,偶用的就比较少拉~~;
  ( c ) Repeater说实在的,是我们国人用起来最方便的控件,呵呵,如果不考虑效率的话,如何发挥~~看你自己的了~~
  
  好了,今天就到这里了,希望大家多多支持呀!我才有继续把他写好的信心哦!做个广告先~~明天我们将研究一下,数据更新,添加,删除的方法,不要走开哦~~

DW+ASP.Net实战(三):数据增删改

今天的任务很简单,就是来说一下 数据的插入、更新和删除。
5。数据的维护
在讲数据的维护以前,我们必须保证上一次的循环数据能够正常显示,才能继续今天的课程。
在这里我们用DataGrid作为使用对象。我们准备给我们的DataGrid1控件加两个列,分别是“修改”,“删除”然后再在DataGrid1控件的上面 添加一个Label控件或者直接写“添加新记录”几个字,然后给“添加新记录”作一个超级链接链接到未来我么要设计的“addNews.aspx”,其他的让我们来实际操作一下:
1。让我们将事先做好的DataGrid1控件作一下改动,在左侧操作栏的“服务器行为”面板上找到“数据网格(DataGrid1)”然后双击,会弹出“数据网格”窗口。
2。在“列”的右侧有“+”和“-”,我们单击“+”,然后在弹出的列表中选择“超级链接”。然后“标题”写上“修改”;“超链接文本”选择“静态文本”,后面写上“修改”;“链接页”选择“数据字段”,里面选择“id”(如果数据表中无id字段,请在数据库数据表中自行修改,添加id字段),“格式字符串”里面填写“editNews.aspx?id={0}”,然后点击确定。
3。我们继续单击对话框中的“+”,然后在弹出的列表中选择“超级链接”。然后“标题”写上“删除”;“超链接文本”选择“静态文本”,后面写上“删除”;“链接页”选择“数据字段”,里面选择“id”,“格式字符串”里面填写“delNews.aspx?id={0}”,然后点击确定。
4。在showNews.aspx页面的任何一个位置加下面的代码:
  <a href="addNews.aspx">添加新记录!</a>

或者:
  <asp:HyperLink ID="addNew" NavigateUrl="addNews.aspx" runat="server" Target="_self" Text="添加新记

录!"></asp:HyperLink>

最后保存文档。完成我们的准备工作~~

A> 数据的插入。
  1。创建“addNews.aspx”页面并保存之。
  2。单击工具栏的J“插入”按钮,选择“应用程序对象”并单击之,在弹出的列表中选择“插入记录”并单击之,再次在弹出的N级列表中选择“插入记录表单向导”并单击之。然后会弹出“插入记录表单”窗口。
  3。“连接”选择“conn”;“表格”选择“news”;“如果成功,则转到”填写我们准备好的“showNews.aspx”;表单字段中将“content”的“显示为”改为“文本区域”;“表单字段”中将“id”的“显示为”改为“隐藏域”,其他保持默认,最后单击“确定”退出。
  4。好了,到目前为止,DW已经自动将添加记录的表单添加到了我们的“addNews.aspx”网页之上。让我们分析一下代码:

系统自动添加程序段1(服务器端)

<MM:Ins&#101;rt
runat="server"
CommandText="<%# "Ins&#101;rt INTO news (addTime, content, id, title) VALUES (?, ?, ?, ?)" %>"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["

MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
Expression="<%# Request.Form["MM_ins&#101;rt"] == "form1" %>"
Cr&#101;ateDataSet="false"
Debug="true"
>
  <Parameters>
    <Parameter Name="@addTime" Value="<%# ((Request.Form["addTime"] != null) &amp;&amp; (Request.Form["addTime"].Length > 0)) ? Request.Form["addTime"] : "" %>" Type="Date" />
    <Parameter Name="@content" Value="<%# ((Request.Form["content"] != null) &amp;&amp; (Request.Form["content"].Length > 0)) ? Request.Form["content"] : "" %>" Type="WChar" />
    <Parameter Name="@id" Value="<%# ((Request.Form["theID"] != null) &amp;&amp; (Request.Form["theID"].Length > 0)) ? Request.Form["theID"] : "" %>" Type="Integer" />
    <Parameter Name="@title" Value="<%# ((Request.Form["title"] != null) &amp;&amp; (Request.Form["title"].Length > 0)) ? Request.Form["title"] : "" %>" Type="WChar" />
  </Parameters>
</MM:Ins&#101;rt>



系统自动添加程序段2(客户端)

<form method="post" name="form1" runat="server">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">AddTime:</td>
      <td><asp:textbox id="addTime" TextMode="SingleLine" Columns="32" runat="server" />
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right" valign="top">Content:</td>
      <td><asp:textbox id="content" TextMode="Multiline" Columns="50" Rows="5" runat="server" />
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Title:</td>
      <td><asp:textbox id="title" TextMode="SingleLine" Columns="32" runat="server" />
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&amp;nbsp;</td>
      <td><input type="submit" value="插入记录"></td>
    </tr>
  </table>
  <input type="hidden" name="theID" value="">
  <input type="hidden" name="MM_ins&#101;rt" value="form1">
</form>



简单说明一下:服务器端的代码就是将数据插入到数据库;客户端的代码就是普通的Form表单,用作提交数据。
废话少说,让我们赶紧测试一下,在浏览器中打开addNews.aspx,然后写入一些数据,点击“插入记录”,怎么样,看看数据是不是已经插入到数据库中了呢,呵呵,很简单吧~~

B> 数据修改

  1。创建“editNews.aspx”页面并保存。
  2。按照我们以前讲的方法创建记录集“DataSet1”(用news表,“筛选项”选择“id”,“=”,“url参数”,“id”)
  3。单击工具栏的“插入”按钮,选择“应用程序对象”并单击之,在弹出的列表中选择“更新记录”并单击之,再次在弹出的N级列表中选择“更新记录表单向导”并单击之。然后会弹出“更新记录表单”窗口。
  4。在“更新记录表单”中的“连接”选择“conn”;表格选择“news”;选取记录自“DataSet1”;“唯一键列”选择“id”;“如果成功,则转到”填写“showNews.aspx”;“表单字段”仅将“content”的“显示为”改为“文本区域”即可;最后单击“确定”退出。
  5。好了,到此为止,保存次文档,在浏览器中测试,打开“showNews.aspx”页面,任意单击一个“修改”会进入“editNews.aspx”页面。然后修改一下,最后点击“更新”看看,记录是不是被更新了,呵呵,是不是操作和“插入记录”如出一辙?好好学吧~~
  下面只是将“更新记录”的服务器端代码列举如下,大家可以参考一下哦~~~
<MM:Up&#100;ate
runat="server"
CommandText="<%# "Up&#100;ate news SET content=?, title=?, addTime=? Wh&#101;re id=?" %>"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["

MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
Expression="<%# Request.Form["MM_up&#100;ate"] == "form1" %>"
Cr&#101;ateDataSet="false"
Debug="true"
>
  <Parameters>
    <Parameter Name="@content" Value="<%# ((Request.Form["content"] != null) &amp;&amp; (Request.Form["content"].Length > 0)) ? Request.Form["content"] : "" %>" Type="WChar" />
    <Parameter Name="@title" Value="<%# ((Request.Form["title"] != null) &amp;&amp; (Request.Form["title"].Length > 0)) ? Request.Form["title"] : "" %>" Type="WChar" />
    <Parameter Name="@addTime" Value="<%# ((Request.Form["addTime"] != null) &amp;&amp; (Request.Form["addTime"].Length > 0)) ? Request.Form["addTime"] : "" %>" Type="Date" />
    <Parameter Name="@id" Value="<%# ((Request.Form["theID"] != null) &amp;&amp; (Request.Form["theID"].Length > 0)) ? Request.Form["theID"] : "" %>" Type="Integer" />
  </Parameters>
</MM:Up&#100;ate>
<MM:DataSet
id="DataSet1"
runat="Server"
IsStoredProcedure="false"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
CommandText="<%# "Sel&#101;ct * FROM news Wh&#101;re id = ?" %>"
Debug="true"
>



细心的读者,你能不能在上面的代码中找出点什么?呵呵,如果没有那就该加油了 ~~~~
别急别急,我们接着说我们的“删除数据”呵呵,实际上……

C> 数据删除

  1。创建“delNews.aspx”文件并保存。
  2。单击工具栏的“插入”按钮,选择“应用程序对象”并单击之,在弹出的列表中选择“删除记录”并单击之然后会弹出“删除记录”窗口。
  3。在窗口中“首先检查是否已定义变量”选择“URL参数”后面填写“id”;“连接”选择“conn”;表格选择“news”;“主键列”为“id”;主键值选择“URL参数”后面写id;“如果成功则转到”填写“showNews.aspx”;最后单击“确定”。
  4。保存文档,好了删除记录功能就这么实现了,是不是自己没写一行代码?赶紧测试,如果通过,那么祝贺你,你成功了,如果还有问题,那要继续加油拉!
服务器段代码如下:


<MM:Del&#101;te
runat="server"
CommandText="<%# "Del&#101;te FROM news Wh&#101;re id=?" %>"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
Expression="<%# ((Request.QueryString["id"] != null) &amp;&amp; (Request.QueryString["id"].Length > 0)) %>"
Cr&#101;ateDataSet="false"
SuccessURL="<%# "showNews.aspx" %>"
Debug="true"
>
  <Parameters>
    <Parameter Name="@id" Value="<%# ((Request.QueryString["id"] != null) &amp;&amp; (Request.QueryString["id"].Length > 0)) ? Request.QueryString["id"] : "" %>" Type="Integer" />
  </Parameters>
</MM:Del&#101;te>


好了,这一讲到此为止。其实到这里,作一个网站所需要的功能我们就完了,有了这些基本的功能,大家根据自己的一些经验和不断的去摸索,相信能做出不错的站点。
明天我们将介绍一些DW+ASP.Net编程的一些技巧和经验!后天我们将用一个小型系统来总结我们的所有内容,也算给朋友们一个最终的交代。
好了,今天就到这里,明天见!

DW+ASP.Net实战(四):开发中应注意的一些小技巧

今天我们来讨论一下在DW开发ASP.Net中的一些小技巧和方法。
虽然我们在前三篇中已经讲一些基本的操作,但在开发过程中有很多的技巧问题应该值得我们注意,下面我们开始:
1.DataGrid中添加自动编号。
有时候我们的DataGrid列表的第一列来一个自动编号,除了读取数据库的Id字段,是否还有其他方式?答案是肯定的,我们可以通过DataGrid的ItemIndex来实现。众所周知,ItemIndex是DataGrid中记录索引号,也就是从0开始的一个数据,自然能够合理的座位每一行的编号数值,程序段如下:
<Columns>  
                  <asp:TemplateColumn HeaderText="" ItemStyle-Width="50">  
                    <ItemTemplate>  
                        <%# Container.ItemIndex+1 %>  
                    </ItemTemplate>  
                  </asp:TemplateColumn>  
    </Column>

简单介绍一下这个代码:
A>  简单说就是DataGrid的一个模版绑定列。
B>  <%# Container.ItemIndex+1 %>就是显示的Index数据;”+1”的意思是本来ItemIndex从0开始索引,”+1”就是从1开始索引,我们得到的结果就是“1、2、3……Index”呵呵:P

2.数据的截取显示或者替换显示问题问题。
  有时候我们在数据库中的某些数据显示到叶面上时候并不是一些直接的数据:比如性别列中我们用0、1表示男女,在页面中我们必须要显示“男、女”;再比如我们的新闻列表,如果标题过长,我们向截取其中的某一部分来显示等等;当然我们可以根据自己的需要更加灵活自如的制作出自己的效果,废话少说,进入主题:
如果我们数据字段”sex”为”bool”类型,我们想显示出来“男、女”:
<%# (bool)DataSe12.FieldValue("sex", Container) ? "男" : "女" %>

说明一下,(bool)是.net中隐式转换方法;DataSet1.FieldValue("sex",Container)是DW特有的数据绑定格式;用到了三元操作符 “? :”。
如果我们只想显示新闻标题的前20个字符,可以这样做:
<%# DataSet1.FieldValue("title",Container).Length>20 ?DataSet1.FieldValue("title",Container).Substring(0,19)+"…" : DataSet1.FieldValue("title", Container)
%>

说明,同样是小技巧,用Length方法读取绑定字段的长度;用Substring()来截取字符;三元符就是用来判断字符串是否超过20字符~~

3.在ASP.Net中加入JS代码。
由于ASP.Net安全性的考虑不允许直接插入JS代码,我们需要JS时候要采用一些小技巧:
A> 页面加载时直接Alert:
if(!Page.IsStartupScriptRegistered("delAlert"))
            {
              Page.RegisterStartupScript("delAlert",@"<script language="javascript">alert("一些文字");</script>");
            }


*说一下,这段话最好就是放在某一个过程函数中。直接放到Page_Load()事件中也是可以的,呵呵。务必要注意的就是此代码运用的时机。

B>微软通用的属性添加:
实际上.net里面有固有的属性添加方法,就是“控件.Attributes.Add(“事件”,”执行内容”)”。这一属性可以广泛地用在“删除提示”、“错误提示”、“返回提示”等多种场合。举例如下:
//Page_Load()过程中

Btn1.Attributes.Add("onclick","Javascript:alert("你单击了按钮")");

//页面文件标签

<asp:button id="Btn1" text="单击" runat="server" />

*说一下,这个属性在DataGrid和DataList、Repeater控件中同样适用!

C>单击出现Alert确定的简单方法<div>。
其实这算一个小技巧,又是一种不是方法的方法。举个例子,我们要单击Label1控件的时候出现提示“你确定吗?”应该怎么做?看代码:
//页面文件标签

<div onclick="alert("你确定么?");">
<asp:Label id="Label1" text="测试" runat="server" />
</div>

//或者:

<div onclick="if(!confirm("你确定么?")) return false;">
<asp:Label id="Label1" text="测试" runat="server" />
</div>

*怎么样,是不是很简单,活用了 ,呵呵

D>Response.Write()中输出JS
需要用到正则匹配,就是大家知道的正则表达式拉。不好解释,举个例子算了:
// 在DW中

<%#DataSe12.FieldValue("tiltle",Container).Length>0?"<a onclick=window.open(\"a.aspx\");>"+ DataSe12.FieldValue("tiltle", Container)+"</a>" : "" %>

// 在VS.Net中

<%DataBinder.Eval(Container,"DataItem.title","<a onclick=window.open(\"a.aspx\");>{0}</a>") %>

//Response.Write()中

<%
  string text="<script language="javascript">alert("ok!");</";
  text=text+"script>";
  Response.Write(text);
%>


4.其他一些DW中应注意的小问题:
  其实在开发DW项目的时候有很多小技巧会帮助你大大提高工作效率:
合理运用Web.Config文件。我们可以把一些常用的属性全部都配置到该文件中去,例如数据链接等,会提高效率;
合理使用DataList和DataGrid控件。由于DataList相对自由,可以自定义许多简单样式,所以列表时推荐使用DW的DataList控件。
RePeater的使用。DataGrid虽然带有分页功能但是很死板,自定义分页又很麻烦。这时候和不使用RePeater呢?DW的数据绑定中很轻松的就可以实现分页功能,而且只需要在面板中设定,并不需要些代码……
尽量少的重复打开数据链接。如果在DW中设置了数据链接。那么在页面加载前链接是打开的,数据读取完毕后DreamweaverCtrls.Dll组件将会把链接关闭;如果你为了同时实现其他的功能在Page_Load()中 或其他函数过程中再次定义数据链接,可能造成资源的浪费,但很多时候又不得不这么做……这可能就是DW的一个弊端吧……
最后一点建议,学会去学习DW自动生成的一些代码中的精华。往往DW自动生成的一些代码都是很优化、很统一格式代码,对我们的学习很有帮助,所以我建议在有时间的时候多多切换到查看源代码模式看一下DW到底生成了些什么.net程序,呵呵,相信对你有帮助的!

DW+ASP.Net实战(五):留言板演示--大结局

经过了前四讲的理论,今天我们就进入实战阶段:我们将从头开始演示一个完成的留言板程序。来结束我们的DW+ASP.Net程序学习~~

程序前提:
1。建立IIS虚拟目录。我起的名字叫“guest”
2。在DW中创建一个新的站点让他指向“guest”根目录。
3。在IE中测试虚拟目录http://localhost/guest/ 成功即可。
4。打开Access数据库,创建一个guest.mdb的文件保存到guest目录的db子目录底下。在guest.mdb中创建guest表字段分布如下:id(自动编号/key)pubuser(文本)email(文本)title(文本)content(备注)ip(文本)addTime(日期时间)ifShow(数字)answer(备注) 最后保存。

言归正传:
1。创建一个ASP.Net C#的动态文件default.aspx保存到guest目录。
2。建立数据链接。在右侧面板上点击“应用程序”的“数据库”面板;单击“+”号,选择“OLE DB连接” 在弹出的对话框中输入连接数据库代码:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=X:\…\guest.mdb "
//其中的Source应该输入数据库的绝对路径

输入结束后点击“测试”,测试成功后点击“确定”即可。这样我们便建立了OLE DB数据连接。选择“服务器行为”面板,点击“部署”将DW的组件部署到guest目录下的bin目录下。
在default.aspx中建立三个如图所示的表格,并按照如图所示设计好内容;点击“服务器行为”面板的“+”,然后选择“数据集”,按照如图方式创建“数据集”
按照下图样式将各个动态文本加入到表格中去,并且选定重复区域;最后添加分页标记“首页” 字样链接为“./”;“添加新留言”字样链接为“?act=add”;“显示被屏蔽留言”字样链接为“?act=showClose”;“留言表单”和“回复表单”分别用<asp:Panel>控件饱含起来。两个Panel的Visible的默认属性为“false”不显示
切换到“代码”视图,在页面最上端添加如下代码:


<%@ Import NameSpace="System"%>
<%@ Import NameSpace="System.Data"%>
<%@ Import NameSpace="System.Data.OleDb"%>

在<html>前面添加如下代码:

<script runat="server">
  string act;
  string sql;
  OleDbConnection conn;
  OleDbCommand comm;
protected void Page_Load(Object Src, EventArgs E)
{
Response.Expires = 0;
  conn = new OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_STRING_conn"]);
  conn.Open();  
  
  if(Request.QueryString["act"]!=null){
    //
  act=Request.QueryString["act"].ToString();
  }else{
    //
  act="";
  }
  switch (act){
    //
  case "add":addGuest.Visible=true;break;
  case "showClose":sql="sel&#101;ct * from guest wh&#101;re ifShow=0 o&#114;der by id desc";break;
  case "close":
      sql = "up&#100;ate guest set ifShow=0 wh&#101;re id="+Request.QueryString["id"];
    comm = new OleDbCommand(sql,conn);
    comm.ExecuteNonQuery();
    Response.Redirect("./");
    break;
  case "open" :
    sql = "up&#100;ate guest set ifShow=1 wh&#101;re id="+Request.QueryString["id"];
    comm = new OleDbCommand(sql,conn);
    comm.ExecuteNonQuery();
    Response.Redirect("./");
    break;
  case "back" :backs.Visible=true; break;
  case "doBack":
    sql="up&#100;ate guest set answer=""+Request["backword"]+"" wh&#101;re id="+Int32.Parse(Request["id"].ToString());
    comm = new OleDbCommand(sql,conn);
    try{
    comm.ExecuteNonQuery();
    Response.Write(sql);
    }catch(Exception ee){
      Response.Write(ee.Message);
    }
    Response.Redirect("./");
    break;
  default:;break;
  
  }
  if (!IsPostBack) DataBind();
  conn.Dispose();
  conn.Close();
}
</script>


将DW自动生成的<MM:DataSet id="DataSet1">的CommandText属性修改为:
CommandText="<%# Request.QueryString["act"]=="showClose"? sql : "Sel&#101;ct * FROM guest Wh&#101;re ifShow = ? o&#114;DER BY id DESC" %>"



最后保存此文档。
呵呵。大功告成了。赶紧测试一下吧!

好了,经过了这么“坎坷”,我们的DW+ASP.net的实战就告一段落了。谢谢大家的支持。这个讲座一共5篇,算不上很彻底的讲解了一些DW在.net中的一些用法,最后还用一个完整的留言板例子来做首尾,很多更深奥的东西还需要大家自己去探索,以后也可能还会不定期的写一些关于DW的文章, 欢迎关注。
下载文件
点击这里下载文件

ASP.NET程序中常用编程代码(二)

1、绑定在DataList中的Dro&#112;DownList
代码:

private void dlistOrder_EditCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
//绑定订单状态
for(int i=0;i<((Dro&#112;DownList)dlistOrder.Items[e.Item.ItemIndex].FindControl("ddlFlag")).Items.Count;i++)
{
  if(((Dro&#112;DownList)dlistOrder.Items[e.Item.ItemIndex].FindControl("ddlFlag")).Items[i].Value == dv.Table.Rows[0]["OrStatus"].ToString())
  {
   ((Dro&#112;DownList)dlistOrder.Items[e.Item.ItemIndex].FindControl("ddlFlag")).Items[i].Sel&#101;cted = true;
  }
}
}

2、另一种绑定方式
代码:

//绑定送货方式
    DataView shipType = o&#114;derSO.GetShipTypeList();
    Dro&#112;DownList ddlShipType = (Dro&#112;DownList)dlistOrder.Items[e.Item.ItemIndex].FindControl("ddlShipType");
    ddlShipType.DataSource = shipType;
    ddlShipType.DataTextField = "StName";
    ddlShipType.DataValueField = "StId";
    ddlShipType.DataBind();
    ddlShipType.Sel&#101;ctedIndex = ddlShipType.Items.IndexOf(ddlShipType.Items.FindByValue(dv.Table.Rows[0]["OrShipType"].ToString()));

3、在编辑嵌套在Datalist内的Datagrid某条记录时定位它所在的Datalist行
代码:

protected void MyList_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)
   {
    HtmlInputHidden odid  = (HtmlInputHidden) e.Item.Cells[0].FindControl("odid");

    DataListItem item = (DataListItem)e.Item.Parent.Parent.Parent;
    Dro&#112;DownList flag = (Dro&#112;DownList)item.FindControl("ddlFlag");
    if(flag.Sel&#101;ctedIndex == 0)
    {
     if(e.CommandName == "Del&#101;te")
     {
      int iOdId = Convert.ToInt32(odid.Value);
      //删除订单明细方法
      o&#114;derSO.Del&#101;teOrderDetail(iOdId);
     }
    }
    else
    {
     GDCIC.Framework.Utility.MessageBox(this,"modifyError","经过确认的订单不能再修改!!");
     return;
    }

    dlistOrder.EditItemIndex = -1;
    BindData();
   }
  }

4、DataBinding绑定表达式:
代码:

1) 普通的绑定表达式
<%# DataBinder.Eval(Container.DataItem, "ContactName") %>

2) 文本+绑定表达式
<asp:Label id=lblDate runat="server" Text="<%# "[" + DataBinder.Eval(Container, "DataItem.NewsCr&#101;atedate") + "]" %>" ForeColor="Red"></asp:Label>

3) 同时带有显示格式的绑定表达式
<%# DataBinder.Eval(Container,"DataItem.USActiveDate","{0:yyyy-MM-dd}") %>

4) 结合绑定表达式和模态框
<A href="<%# ShowModalWin(Convert.ToString(DataBinder.Eval(Container.DataItem, "PictureImage")),Convert.ToString(DataBinder.Eval(Container.DataItem, "DetailID")),Convert.ToString(DataBinder.Eval(Container.DataItem, "PictureID")))%>">

其中:后台代码文件中ShowModalWin()方法的定义如下:
protected string ShowModalWin(string PictureImage,string DetailID,string PictureID)
{
return " window.showModalDialog(\"Customers/ShowPictureInfo.aspx?pid="+PictureImage+"&amp;did="+DetailID+"&amp;id="+PictureID+"\",\"\",\"dialogHeight:320px;dialogWidth:480px;center:yes;help:no;status:no;scroll:no\");";
}

或者将参数提取出来单独定义成一变量:
const string WINDOWPARAMSTRING="dialogWidth:540px;dialogHeight:420px;help:0;status:0;resizeable:1;scroll:no";

Page.RegisterStartupScript("functionscript","<script language="noscript">window.showModalDialog("EditUserService.aspx?URID="+iURID+"","",""+WINDOWPARAMSTRING+"")</script>");


5、在已有的数据集中添加一个新行
代码:

int iURID=int.Parse(Session[Globals.USER_ID_SESSION_NAME].ToString());
DataSet myds=UserSO.GetMapUserServiceToServiceList(iURID);

//增加一个邮件行
DataRow mydr = myds.Tables[0].NewRow();
mydr["SVHref"] = "http://211.155.23.77&#...
mydr["SVName"] = "政务邮箱";
mydr["USEndDate"] = System.DateTime.Now.AddDays(1);
myds.Tables[0].Rows.Add(mydr);

DataView mydv=myds.Tables[0].DefaultView;
if(myds.Tables[0].Rows.Count!=0)
{
mydv.RowFilter=" USEndDate>""+System.DateTime.Now+""";// 没过期
dgUserService.Visible=true;
dgUserService.DataSource =mydv;

try
{
  dgUserService.DataBind();
}
catch
{
  dgUserService.CurrentPageIndex =dgUserService.PageCount -1;
  dgUserService.DataBind();
}    
}
else
{
dgUserService.Visible=false;
}

6、加入客户端验证控件
代码:

//验证空值
<asp:requiredfieldvalidator id="valUsername" runat="server" controltovalidate="txtUsername" display="None" errormessage="请输入用户名 !!"></asp:requiredfieldvalidator>

//验证网址
<asp:regularexpressionvalidator id="rev" runat="server" ErrorMessage="公司网址不合法[要有http://] !" Display="None" ControlToValidate="txtCPWebsite" ValidationExpression="http://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;amp;=]*)?"></asp:regularexpressionvalidator>

//验证邮箱
<asp:RequiredFieldValidator id="rfv" runat="server" ControlToValidate="txtCPEmail" Display="None" ErrorMessage="请输入电子邮箱 !!"></asp:RequiredFieldValidator>

//验证邮编
<asp:regularexpressionvalidator id="rev5" runat="server" ErrorMessage="邮政编码不合法 !" Display="None" ControlToValidate="txtCPPostCode" ValidationExpression="\d{6}"></asp:regularexpressionvalidator>

//显示错误信息
<asp:validationsummary id="vs" runat="server" ShowSummary="False" ShowMessageBox="True"></asp:validationsummary>

7、枚举类型的使用

1) 定义:
public enum UserTypeEnum:byte
{
/// <summary>
/// 个人用户
/// </summary>
Individual = 0,
        
/// <summary>
/// 单位用户
/// </summary>
Corporation = 1
}

2) 在代码中的使用方法:
UserTypeEnum ut = UserTypeEnum.Corporation;
GDCIC.Entities.UserVO userVO = GDCIC.Facade.UserSO.GetUserVO(urid);

ut = (UserTypeEnum)Enum.Parse(UserTypeEnum.Corporation.GetType(),userVO.URUserType);
if (ut == UserTypeEnum.Corporation)
{
    ... ...
}

//直接获得其代表的值的方法
Response.Write("枚举值为:"+Convert.ToInt32(UserTypeEnum.Individual));

8、验证用户名必须以字母打头且不能含有中文

String sUsername = txtUsername.Text.Trim();
if(!Regex.IsMatch(sUsername, "^[A-Za-z].*"))
{
    Utility.MessageBox(this,"nameFormatError","用户名要以字母开头, 且不要用中文名称 !!");
    return;
}

9、如何在删除并重新安装 IIS 之后修复 IIS 映射

运行 Aspnet_regiis.exe 实用工具:

1、
单击“开始”,然后单击“运行”。
在“打开”框中,键入 cmd,然后按 Enter 键。
在命令提示符下键入以下命令,然后按 Enter 键:
"%windir%\Microsoft.NET\Framework\版本\aspnet_regiis.exe" -i

2、在此路径中,版本代表在服务器上安装的 .NET Framework 的版本号。键入此命令时,必须将此占位符替换为实际版本号。
注册 Aspnet_isapi.dll;
单击“开始”,然后单击“运行”。
在“打开”文本框中,键入以下内容,然后按 Enter 键:
regsvr32 %windir%\Microsoft.NET\Framework\版本\aspnet_isapi.dll

Regsvr32 将返回注册结果。

10、下载文件的方法:

Response.AppendHeader("content-disposition", "attachment; filename=" + Request.Params("link").ToString)
Response.ContentType = Request.Params("contenttype").ToString
Response.WriteFile(strLink)
Response.End()

可从数据中读出文件名称,直接指定到服务器的路径下即可,所以要求上传文件时`需求指定文件在服务器上保存的路径。

对于此方法,需要重定向到一个页面,此页面负责处理文件的写入。参数contenttype可以选择写或不写,在明确的情况下,最好写入。

但appendheader必须写明,最后调用WriteFile将文件输出,用到的路径是相对路径。

11、如何在动态加载控件时,让客户端脚本起作用

event.srcElement,可以得到事件引发者对象。对于要求引用多个对象时,可以用一变量将控件值保存起来。

方法如下:
    Response.Write("<input type=\"hidden\" id=\"jjj\" value="+this.ClientID+">");
    注:此处此控件的ID号为固定值。

12、如何在IIS上注册aspnet

aspnet_regIIS -i

13、Server对象

1) Server.Transfer: 转到另一页面,但没有向浏览器发送任何信息,当用户刷新时,将刷新的是重定向之前的那一页。
2) Server.Execute: 执行另一页面的请求,执行之后返回原来的页面。

14、禁用请求验证的方法

请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示危及应用程序安全的尝试,如跨站点的脚本攻击。通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。

如:<system.web>
<pages ValidateRequest="false" />
</system.web>

ASP.NET程序中常用编程代码(一)

1.为按钮添加确认对话框

Button1.Attributes.Add("onclick","return confirm(’确认?’)");
button.attributes.add("onclick","if(confirm(’are you sure...?’)){return true;}else{return false;}")

2.删除表格选定记录

//获得DataGrid主键
int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];
string del&#101;teCmd = "Del&#101;te from Employee wh&#101;re emp_id = " + intEmpID.ToString();

3.删除表格记录警告

private void DataGrid_ItemCr&#101;ated(Object sender,DataGridItemEventArgs e)
{
 switch(e.Item.ItemType)
 {
  case ListItemType.Item :
  case ListItemType.Alt&#101;rnatingItem :
  case ListItemType.EditItem://编辑项
   TableCell myTableCell;
   myTableCell = e.Item.Cells[14];
   LinkButton myDel&#101;teButton ;
   myDel&#101;teButton = (LinkButton)myTableCell.Controls[0];
   myDel&#101;teButton.Attributes.Add("onclick","return confirm(’您是否确定要删除这条信息’);");
   break;
  default:
   break;
 }
}

4.点击表格行链接另一页

private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
 //点击表格打开
 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)
  e.Item.Attributes.Add("onclick","window.open(’Default.aspx?id=" + e.Item.Cells[0].Text + "’);");
}

5.双击表格连接到另一页

在itemDataBound事件中

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)
{
 string o&#114;derItemID =e.item.cells[1].Text;
 ...
 e.item.Attributes.Add("ondblclick", "location.href=’../ShippedGrid.aspx?id=" + o&#114;derItemID + "’");
}

6.双击表格打开新一页

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)
{
 string o&#114;derItemID =e.item.cells[1].Text;
 ...
 e.item.Attributes.Add("ondblclick", "open(’../ShippedGrid.aspx?id=" + o&#114;derItemID + "’)");
}

7.表格超连接列传递参数

<asp:HyperLinkColumn Target="_blank" headertext="ID号" DataTextField="id" NavigateUrl="aaa.aspx?id=’
 <%# DataBinder.Eval(Container.DataItem, "数据字段1")%>’&amp;name=’<%# DataBinder.Eval(Container.DataItem, "数据字段2")%>’/>

8.表格点击改变颜色

if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)
{
 e.Item.Attributes.Add("onclick","this.style.backgroundColor=’#99cc00’;
    this.style.color=’buttontext’;this.style.cursor=’default’;");
}

9.在表格行中移动鼠标时改变颜色

写在DataGrid的_ItemDataBound里

if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)
{
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=’’;");
}

10.关于日期格式

日期格式设定

DataFormatString="{0:yyyy-MM-dd}"

我觉得应该在itembound事件中

e.items.cell["你的列"].text=DateTime.Parse(e.items.cell["你的列"].text.ToString("yyyy-MM-dd"))

11.获取错误信息并到指定页面

不要使用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的产生从而丢失了错误信息,所以页面导向应该直接在服务器端执行,这样就可以在错误处理页面得到出错信息并进行相应的处理。

12.清空Cookie

Cookie.Expires=[DateTime];
Response.Cookies("UserName").Expires = 0;

13.自定义异常处理

//自定义异常处理类
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
}

14.Panel 横向滚动,纵向自动扩展

<asp:panel style="overflow-x:scroll;overflow-y:auto;"></asp:panel>

15.回车转换成Tab

<script language="noscript" for="document" event="onkeydown">
 if(event.keyCode==13 &amp;&amp; event.srcElement.type!=’button’ &amp;&amp; event.srcElement.type!=’submit’ &amp;&amp;     event.srcElement.type!=’reset’ &amp;&amp; event.srcElement.type!=’’&amp;&amp; event.srcElement.type!=’textarea’);
   event.keyCode=9;
</script>

onkeydown="if(event.keyCode==13) event.keyCode=9"

16.DataGrid超级连接列

DataNavigateUrlField="字段名" DataNavigateUrlFormatString=http://xx/inc/del&#101;te.aspx?ID={0}

17.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"+"\"");
 }
}

18.模板列

<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;
  }
 }
}

19.数字格式化

【<%#Container.DataItem("price")%>的结果是500.0000,怎样格式化为500.00?】

<%#Container.DataItem("price","{0:¥#,##0.00}")%>

int i=123456;
string s=i.ToString("###,###.00");

20.日期格式化

  【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);

21.怎样作到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版

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=" 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=" 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="noscript">
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=\"noscript\">";
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_ItemCr&#101;ated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
 foreach(DataGridItem di in this.DataGrid1.Items)
 {
  if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.Alt&#101;rnatingItem)
  {
   ((LinkButton)di.Cells[8].Controls[0]).Attributes.Add("onclick","return confirm(’确认删除此项吗?’);");
  }
 }
}

30.DataGrid样式交替:

ListItemType itemType = e.Item.ItemType;

if (itemType == ListItemType.Item )
{
 e.Item.Attributes["onmouseout"] = " this.style.backgroundColor=’#FFFFFF’;";
 e.Item.Attributes["onmouseover"] = " this.style.backgroundColor=’#d9ece1’;cursor=’hand’;" ;
}
else if( itemType == ListItemType.Alt&#101;rnatingItem)
{
 e.Item.Attributes["onmouseout"] = " this.style.backgroundColor=’#a0d7c4’;";
 e.Item.Attributes["onmouseover"] = " this.style.backgroundColor=’#d9ece1’;cursor=’hand’;" ;
}

31.DataGrid添添加一个编号列:

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();   

32.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;
 }
}

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

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

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

在Application_Start中添加以下代码:

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

35.变量.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%

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

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

</SCRIPT> <body leftMargin="0" topMargin="0" onload=" gook()" marginwidth="0" marginheight="0">
<form name="frm" action=" http://220.194.55.68:6080/... " 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");
}



37.对DataGrid中的Checkbox列进行全选或全否选的客户端脚本!

<script language="noscript">
function checkall()
{
var Myform = window.document.forms[0]; //在当前页面
for(var i=0;i<Myform.elements.length;i++) //在当前页面循环查找控件
{
c = Myform.elements[i].type;
if(c == "checkbox" &amp;&amp; document.all.CheckBox1.checked) //判断找到的控件是否是CheckBox
{
Myform.elements[i].checked = true; //所有的CheckBox被选中
}
else
{
Myform.elements[i].checked = false; //所有的CheckBox不被选中
}
}
}
</script>

<asp:checkbox id="CheckBox1" runat="server" Text="是否全部審核?"
onclick="checkall();" ></asp:checkbox>

Tags: JS

ASP.NET2.0 开发网站程序学习笔记--基础篇

没有废话直接进入主题 by&nbsp; www.tsingfeng.com

第一步:
配置ASP.NET2.0的开发环境,只需要把VWD(就是Visual Web Developer)下载完了后,完整安装就可以了.

第二步:
(是不是有些快了"")

ASP.NET2.O基础

  1. 利用VWD新建,修改页面.还有样式表的使用.
    (例创建一个网站,FILE-&gt;NEW WEB SITE-&gt;ASP.NET WEB SITE)
  2. 一些数据控件的使用.SQLDATASOUCE,GRIDVIEW,DATALIST,FORMVIER

ADO.NET数据访问基础

  1. 建立一个数据库的连接,从而创建一个CONNECTION对象
    (sqlconnection conn =new sqlconnection(&quot;connectionstring&quot;);)
  2. 对于指定的CONNECTION的对象,通过COMMAND对象构造一个相关的SQL语句
    (sqlcommand cmd=new sqlcommand(&quot;sql&nbsp; string&quot;,conn);)
  3. 通过COMMADN对象的方法执行SQL语句,获得一个DATAREADER对象数据流
    (sqldatareader dr=cmd.executeread();)
  4. 通过对DATAREADER对象的处理得到输出
    (例,COMMAND的EXECUTESCALAR()方法返回的是对象,可以(INT)CMD.EXECUTESCALAR();强制转换的)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用参数化的SQLCOMMAND对象

  1. 新建参数化对象SQLCOMMAND
    (sqlcommand cmd=new sqlcommand(&quot;select * from mytable where id=@theid&quot;,conn);)
  2. 定义SQLPARAMETER对象
    (param = new sqlparameter(&quot;@theid&quot;, sqldbtype.int); )
  3. 实现SQLPARAMETER与SQLCOMMAND的关联
    (cmd.sqlparameters.add(...))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储过程

  1. 告诉SQLCOMMAND对象要执行的存储过程的名称
    (sqlcommand cmd=new sqlcommand(&quot;my proc&quot;,conn);)
  2. 告诉SQLCOMMAND对象要执行的是一个存储过程
    (cmd.commandtype=commandtype.StoredProcedure)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数化的存储过程,也和参数化的SQLCOMMAND一样差不多,不多说了。

基础部分就这样吧。自己多看看,应该就会明白了。ASP.NET2.0比ASP.NET1.X版本好学好用多了.代码可能有些不太对的,大家看了别笑话我.就看了一篇.凭记忆写的.mumu原创了.转载请说明出处.

100多人看了,就没一个回复"".没信心往下写了.失败

Tags: 笔记

C#语言入门,visual c#速成版

http://msdn2.microsoft.com/zh-cn/library/zkxk2fwf.aspx

VBScript版的省市联动菜单

[html]<script language=vbScript>
<!--
public x(33)
x( 0 )="东城,西城,崇文,宣武,朝阳,丰台,石景山,海淀,门头沟,房山,通州,顺义,昌平,大兴,平谷,怀柔,密云,延庆"
x( 1 )="黄浦,卢湾,徐汇,长宁,静安,普陀,闸北,虹口,杨浦,闵行,宝山,嘉定,浦东,金山,松江,青浦,南汇,奉贤,崇明"
x( 2 )="和平,东丽,河东,西青,河西,津南,南开,北辰,河北,武清,红挢,塘沽,汉沽,大港,宁河,静海,宝坻,蓟县"
x( 3 )="万州,涪陵,渝中,大渡口,江北,沙坪坝,九龙坡,南岸,北碚,万盛,双挢,渝北,巴南,黔江,长寿,綦江,潼南,铜梁,大足,荣昌,壁山,梁平,城口,丰都,垫江,武隆,忠县,开县,云阳,奉节,巫山,巫溪,石柱,秀山,酉阳,彭水,江津,合川,永川,南川"
x( 4 )="石家庄,邯郸,邢台,保定,张家口,承德,廊坊,唐山,秦皇岛,沧州,衡水"
x( 5 )="太原,大同,阳泉,长治,晋城,朔州,吕梁,忻州,晋中,临汾,运城"
x( 6 )="呼和浩特,包头,乌海,赤峰,呼伦贝尔盟,阿拉善盟,哲里木盟,兴安盟,乌兰察布盟,锡林郭勒盟,巴彦淖尔盟,伊克昭盟"
x( 7 )="沈阳,大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛"
x( 8 )="长春,吉林,四平,辽源,通化,白山,松原,白城,延边"
x( 9 )="哈尔滨,齐齐哈尔,牡丹江,佳木斯,大庆,绥化,鹤岗,鸡西,黑河,双鸭山,伊春,七台河,大兴安岭"
x( 10 )="南京,镇江,苏州,南通,扬州,盐城,徐州,连云港,常州,无锡,宿迁,泰州,淮安"
x( 11 )="杭州,宁波,温州,嘉兴,湖州,绍兴,金华,衢州,舟山,台州,丽水"
x( 12 )="合肥,芜湖,蚌埠,马鞍山,淮北,铜陵,安庆,黄山,滁州,宿州,池州,淮南,巢湖,阜阳,六安,宣城,亳州"
x( 13 )="福州,厦门,莆田,三明,泉州,漳州,南平,龙岩,宁德"
x( 14 )="南昌市,景德镇,九江,鹰潭,萍乡,新馀,赣州,吉安,宜春,抚州,上饶"
x( 15 )="济南,青岛,淄博,枣庄,东营,烟台,潍坊,济宁,泰安,威海,日照,莱芜,临沂,德州,聊城,滨州,菏泽"
x( 16 )="郑州,开封,洛阳,平顶山,安阳,鹤壁,新乡,焦作,濮阳,许昌,漯河,三门峡,南阳,商丘,信阳,周口,驻马店,济源"
x( 17 )="武汉,宜昌,荆州,襄樊,黄石,荆门,黄冈,十堰,恩施,潜江,天门,仙桃,随州,咸宁,孝感,鄂州"
x( 18 )="长沙,常德,株洲,湘潭,衡阳,岳阳,邵阳,益阳,娄底,怀化,郴州,永州,湘西,张家界"
x( 19 )="广州,深圳,珠海,汕头,东莞,中山,佛山,韶关,江门,湛江,茂名,肇庆,惠州,梅州,汕尾,河源,阳江,清远,潮州,揭阳,云浮"
x( 20 )="南宁,柳州,桂林,梧州,北海,防城港,钦州,贵港,玉林,南宁地区,柳州地区,贺州,百色,河池"
x( 21 )="海口,三亚"
x( 22 )="成都,绵阳,德阳,自贡,攀枝花,广元,内江,乐山,南充,宜宾,广安,达川,雅安,眉山,甘孜,凉山,泸州"
x( 23 )="贵阳,六盘水,遵义,安顺,铜仁,黔西南,毕节,黔东南,黔南"
x( 24 )="昆明,大理,曲靖,玉溪,昭通,楚雄,红河,文山,思茅,西双版纳,保山,德宏,丽江,怒江,迪庆,临沧"
x( 25 )="拉萨,日喀则,山南,林芝,昌都,阿里,那曲"
x( 26 )="西安,宝鸡,咸阳,铜川,渭南,延安,榆林,汉中,安康,商洛"
x( 27 )="兰州,嘉峪关,金昌,白银,天水,酒泉,张掖,武威,定西,陇南,平凉,庆阳,临夏,甘南"
x( 28 )="银川,石嘴山,吴忠,固原"
x( 29 )="西宁,海东,海南,海北,黄南,玉树,果洛,海西"
x( 30 )="乌鲁木齐,石河子,克拉玛依,伊犁,巴音郭勒,昌吉,克孜勒苏柯尔克孜,博 尔塔拉,吐鲁番,哈密,喀什,和田,阿克苏"
x( 31 )=""
x( 32 )=""
x( 33 )="台北,高雄,台中,台南,屏东,南投,云林,新竹,彰化,苗栗,嘉义,花莲,桃园,宜兰,基隆,台东,金门,马祖,澎湖"

function test(a,b)
dim num,x1,i
num =a.sel&#101;ctedIndex
x1=split(x(num),",")
b.options.length=ubound(x1)+1
For i = 0 to ubound(x1)
b.options(i).text =x1(i)
b.options(i).value = x1(i)
next
end function
-->
</script>
<body>
<sel&#101;ct name="a" onChange="vbscript:test a,b">
<option value= 0 >北京</option>
<option value= 1 >上海</option>
<option value= 2 >天津</option>
<option value= 3 >重庆</option>
<option value= 4 >河北</option>
<option value= 5 >山西</option>
<option value= 6 >内蒙古</option>
<option value= 7 >辽宁</option>
<option value= 8 >吉林</option>
<option value= 9 >黑龙江</option>
<option value= 10 >江苏</option>
<option value= 11 >浙江</option>
<option value= 12 >安徽</option>
<option value= 13 >福建</option>
<option value= 14 >江西</option>
<option value= 15 >山东</option>
<option value= 16 >河南</option>
<option value= 17 >湖北</option>
<option value= 18 >湖南</option>
<option value= 19 >广东</option>
<option value= 20 >广西</option>
<option value= 21 >海南</option>
<option value= 22 >四川</option>
<option value= 23 >贵州</option>
<option value= 24 >云南</option>
<option value= 25 >西藏</option>
<option value= 26 >陕西</option>
<option value= 27 >甘肃</option>
<option value= 28 >宁夏</option>
<option value= 29 >青海</option>
<option value= 30 >新疆</option>
<option value= 31 >香港</option>
<option value= 32 >澳门</option>
<option value= 33 >台湾</option>

</sel&#101;ct>
<sel&#101;ct name="b">
</sel&#101;ct>
</body>[/html]

Tags: vbscript

原创代码申请落伍,asp.net中实现html格式生成.(zt)

最近在做政府门户时用最简单的方法实现了对url的改写成html格式,下面我把代码贴出来,供参考.
using System;
using System.Web;
using System.Web.Caching;
using System.Web.Security;
using System.Text.RegularExpressions;
using System.Web.SessionState;

namespace DXWeb
{
        /// <summary>
        /// URL 重写
        /// </summary>
        public class UrlReWrite : IHttpHandler ,IRequiresSessionState
        {
                /// <summary>
                /// 通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。
                /// </summary>
                /// <param name="context">HttpContext 对象,它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。 </param>
                public void ProcessRequest(HttpContext Context)
                {
                        try
                        {
                                int type = 0;

                                string Url = Context.Request.Url.AbsolutePath;

                                Url = Url.Substring(Url.LastIndexOf("/") + 1,Url.Length - Url.LastIndexOf("/") - 1);
                                Url = Url.Substring(0,Url.IndexOf(".")).ToLower();

                                //如果第1位是f则指明是栏目页
                                if (Url.Substring(0,1) == "f")
                                {
                                        Url = Url.Substring(1,Url.Length - 1);
                                        type = 1;
                                }
                                else if (Url.Substring(0,1) == "n")//新闻
                                {
                                        Url = Url.Substring(1,Url.Length - 1);
                                        type = 2;
                                }
                                else if (Url.Substring(0,1) == "v")//视频
                                {
                                        Url = Url.Substring(1,Url.Length - 1);
                                        type = 3;
                                }
                                else if (Url.Substring(0,1) == "s")//网上办事
                                {
                                        Url = Url.Substring(1,Url.Length - 1);
                                        type = 4;
                                }
                                else if (Url.Substring(0,1) == "z")//办事指南
                                {
                                        Url = Url.Substring(1,Url.Length - 1);
                                        type = 5;
                                }

                                //检查文件名是否数字
                                if (Common.CheckInput(Url,"^[1-9][0-9]{0,9}$"))
                                {
                                        foreach (string key in Context.Request.QueryString.AllKeys)
                                                Url += "&" + key + "=" + Context.Request.QueryString[key];

                                        if (type == 1)
                                                Context.Server.Execute("Navigate.aspx?id=" + Url);
                                        else if (type == 2)
                                                Context.Server.Execute("News.aspx?id=" + Url);
                                        else if (type == 3)
                                                Context.Server.Execute("ShowVideo.aspx?id=" + Url);
                                        else if (type == 4)
                                                Context.Server.Execute("Service.aspx?id=" + Url);
                                        else if (type == 5)
                                                Context.Server.Execute("ShowService.aspx?id=" + Url);
                                }
                                else
                                {
                                        //否则查看硬盘是否有此文件

                                }
                                
                        }
                        catch// (Exception ex)
                        {
                                //Context.Response.Write(ex.Message);
                        }
                }

                /// <summary>
                /// 获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。
                /// </summary>
                public bool IsReusable
                {
                        get
                        {
                                return false;
                        }
                }
        }
}
大概思路是调用IHttpHandler接口将原来的ulr输入缓存l转换成html格式后输出,当然需要iis支持.如果有用的到的可以供参考,也可以加我msn和我讨论:lodge55@hotmail.com.大家可以先查看IHttpHandler属性,详细的我们可以讨论.

asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式

在网站开发时,生成缩略图是一个非常常见和实用的功能.以前在asp里只能借助com组件实现,现在在.net里可以利用框架的强大的类库轻松实现.下面帖出完整的代码(带详细注释),参考了网上的一些文章及.net sdk相关内容.QQROOM网络家园的图片上传用到了所有的4种生成方式.

        ////<summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="originalImagePath">源图路径(物理路径)</param>
        /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
        /// <param name="width">缩略图宽度</param>
        /// <param name="height">缩略图高度</param>
        /// <param name="mode">生成缩略图的方式</param>    
        public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
        {
            Image originalImage = Image.FromFile(originalImagePath);
            
            int towidth = width;
            int toheight = height;
        
            int x = 0;
            int y = 0;
            int ow = originalImage.Width;
            int oh = originalImage.Height;        

            switch (mode)
            {        
                case "HW"://指定高宽缩放(可能变形)                
                    break;
                case "W"://指定宽,高按比例                    
                    toheight = originalImage.Height * width/originalImage.Width;
                    break;
                case "H"://指定高,宽按比例
                    towidth = originalImage.Width * height/originalImage.Height;                    
                    break;        
                case "Cut"://指定高宽裁减(不变形)                
                    if((double)originalImage.Width/(double)originalImage.Height > (double)towidth/(double)toheight)
                    {
                        oh = originalImage.Height;
                        ow = originalImage.Height*towidth/toheight;
                        y = 0;
                        x = (originalImage.Width - ow)/2;
                    }
                    else
                    {
                        ow = originalImage.Width;
                        oh = originalImage.Width*height/towidth;
                        x = 0;
                        y = (originalImage.Height - oh)/2;
                    }
           &nb