蝈蝈俊.net

-- 用随笔来记录自己的技术感触
随笔 - 673, 评论 - 4416, 引用 - 276

导航

关于

记录自己的技术心得

标签

每月存档

最新留言

  • Cjlzcnuv
    perfect design thanks <a href=" http://www.wikio.com/user/aloimejug/bio "&a...
    by Cjlzcnuv(匿名) on 2010/3/22 0:43:37
  • Omhobhjt
    It's serious <a href=" http://www.wikio.com/user/oehulopyji/bio ">fr...
    by Omhobhjt(匿名) on 2010/3/22 0:43:36
  • Eiybkdpo
    This site is crazy :) <a href=" http://www.wikio.com/user/ofypaile/bio "&am...
    by Eiybkdpo(匿名) on 2010/3/22 0:43:34
  • Hwpphius
    I'm happy very good site <a href=" http://www.wikio.com/user/geebypubeel/bio &qu...
    by Hwpphius(匿名) on 2010/3/21 23:56:57
  • Aefdrkin
    Best Site Good Work <a href=" http://www.wikio.com/user/inohedos/bio "&...
    by Aefdrkin(匿名) on 2010/3/21 23:56:56
  • Kcjmgqgv
    magic story very thanks <a href=" http://www.wikio.com/user/riobakahol/bio &quot...
    by Kcjmgqgv(匿名) on 2010/3/21 23:56:55
  • Iefdndcu
    real beauty page <a href=" http://www.wikio.com/user/geebypubeel/bio "&...
    by Iefdndcu(匿名) on 2010/3/21 22:39:25
  • Uuorbsjt
    This site is crazy :) <a href=" http://www.wikio.com/user/inohedos/bio "&am...
    by Uuorbsjt(匿名) on 2010/3/21 22:39:08
  • Kkckitku
    real beauty page <a href=" http://www.wikio.com/user/geebypubeel/bio "&...
    by Kkckitku(匿名) on 2010/3/21 22:38:54
  • Dqcrmtcw
    Best Site Good Work <a href=" http://www.wikio.com/user/okefykyhyac/bio "&a...
    by Dqcrmtcw(匿名) on 2010/3/21 21:50:46

广告

统计Google广告点击次数的方法

象Google的广告,展示啥内容,都是由Google自己控制的,使用普通的页面提交连接的方式,我们是无法统计我们页面上的Google广告被点击了多少次,被谁点击了。因为这些页面都不受我们控制。

下面介绍一个可以统计Google那样广告点击次数的方法。

<html> <head> <title>点击计数</title> <script language="javascript"> <!-- function keyDown(e) { if (event.srcElement.tagName=='IFRAME' && event.clientX==-1 && event.clientY==-1 && event.fromElement=='[object]'){ // 如果需要向其他页面提交 //document.adform.submit(); var num = parseInt(shownum.innerHTML); shownum.innerHTML = num + 1; } return false; } document.onmousemove=keyDown; document.onmouseover=keyDown ; document.onmouseout=keyDown ; document.onblur=keyDown; //--> </script> </head> <body> <!-- 如果需要向另外一个页面传递参数,可以用下面的方式//--> <form name="adform" method="post" action="ad_click.php" target='ad_click'> <input name="uid" value='1922' type="hidden" id="uid"> <input name="keyid" type="hidden" value='1119342517' id="keyid"> <input name="aid" type="hidden" id="aid"> </form> <iframe name='ad_click' marginwidth="0" marginheight="0" frameborder="0" scrolling="no" src='about:blank' width="0" height="0"> </iframe> <!--页面提交代码结束//--> 点击IFrame中的次数:<div id="shownum"> 0</div> <iframe name='ad_click' marginwidth="0" marginheight="0" frameborder="0" scrolling="no" src='http://www.csdn.net/' width="100" height="100" style="width: 616px; height: 171px"> </iframe> <br /> <br /> <a href="http://blog.joycode.com/" target="_blank">本页其它连接</a> </body> </html>
上述代码中,我们在点击、移动等事件中,判断用户点击的是不是某个需要的范围内。然后进行计数,如果我们需要额外的记录,可以在这些事件函数中,向一个我们可控的页面进行提交。为了不影响页面的展示,这个页面被提交的页面,是在一个隐含的IFrame中实现的,具体看上述代码就明白了。
通过以上的方法,我们就可以实现不论点本网站的自己广告,还是Google广告,每点击一次,增加多少可用分这类的逻辑了。(当然这个逻辑可以更复杂)

posted on 2005-06-21 17:11:00 by ghj1976  评论(17) 阅读(7758)

.net 2.0 中 DataTable 小兵变大将

我们先看一段WEB Service的代码。

[WebMethod] public DataTable GetInfo() { OleDbConnection nwindConn = new OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=D:\\Northwind\\northwind.mdb;"); OleDbCommand selectCMD = new OleDbCommand("SELECT CustomerID, CompanyName FROM Customers" , nwindConn); selectCMD.CommandTimeout = 30; OleDbDataAdapter custDA = new OleDbDataAdapter(); custDA.SelectCommand = selectCMD; DataSet custDS = new DataSet(); custDA.Fill(custDS, "Customers"); return custDS.Tables[0]; }

在.net 1.1 中,这是典型的一个错误,在.net 1.1 、1.0中,WEB Service 的返回或者输入参数不能是 DataTable,这是一个众人皆知的知识点。原因就是 DataTable 不象DataSet那样支持序列化。在.net 1.1中,我们解决这个问题的方法就是使用DataSet。但是使用DataSet 的时候,经常会有一种杀鸡用牛刀的感觉。

附:.net 1.1 中使用DataTable作为WEB Service 返回值会报以下异常:

类型 System.ComponentModel.ISite 的成员 System.ComponentModel.MarshalByValueComponent.Site 是接口,因此无法将其序列化。

在.net 2.0 中,以上同样的代码,则没有任何问题了。原因是2.0中 DataTable实现了序列化、反序列。

在VS2005 Beta2 的文档中,我们可以看到2.0 中 DataTable实现了以下接口:

Explicit Interface Implementations
  System.ComponentModel.IListSource.get_ContainsListCollection   
  System.ComponentModel.IListSource.GetList   
  System.Xml.Serialization.IXmlSerializable.GetSchema   
  System.Xml.Serialization.IXmlSerializable.ReadXml   
  System.Xml.Serialization.IXmlSerializable.WriteXml 

而在1.1中,DataTable 只实现了一个接口:

Explicit Interface Implementations
System.ComponentModel.IListSource.ContainsListCollection

把DataSet中的一些功能移到 DataTable中,2.0 中还有 Merge 方法,即合并数个数据集。

DataTable的代码合并参看下面代码。

private static void DemonstrateMergeTable() { DataTable table1 = new DataTable("Items"); DataColumn column1 = new DataColumn("id", typeof(System.Int32)); DataColumn column2 = new DataColumn("item", typeof(System.Int32)); table1.Columns.Add(column1); table1.Columns.Add(column2); table1.PrimaryKey = new DataColumn[] { column1 }; table1.RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed); DataRow row; for (int i = 0; i <= 3; i++) { row = table1.NewRow(); row["id"] = i; row["item"] = i; table1.Rows.Add(row); } // Accept changes. table1.AcceptChanges(); DataTable table2 = table1.Clone(); row = table2.NewRow(); row["id"] = 14; row["item"] = 774; table2.Rows.Add(row); row = table2.NewRow(); row["id"] = 12; row["item"] = 555; table2.Rows.Add(row); row = table2.NewRow(); row["id"] = 13; row["item"] = 665; table2.Rows.Add(row); // Merge table2 into the table1. table1.Merge(table2); }
综合上述,.net 2.0 中 DataTable 从后台的默默无问的小兵变成独当一面的大将了。

posted on 2005-06-21 10:54:00 by ghj1976  评论(12) 阅读(8556)

asp.net 2.0中 TreeView 控件 学习笔记(1)

前言:
ASP.net 2.0 中,一些新的更加方便的控件被加了进来,为了方便自己学习这些控件,我把我自己学习这些控件的知识整理成这个系列文章。文章可能很简单,如果已经知道这些知识点的就不用再看了。
ASP.net 2.0中?TreeView 控件。
以前我们要在网页中实现一个树,是非常麻烦的,其最麻烦的地方在于,兼容不同版本的浏览器。而绝大多数人,对各个浏览器分别支持那些JavaScript、CSS、Html 标签不是很熟悉,就造成开发一个树复杂,甚至只支持少量的浏览器。
ASP.net 2.0 中,微软为我们预先作了很多方面的控件,TreeView 就是其中一个。
在介绍TreeView 之前,我们先在网页中,用TreeView实现一个树。我们边看代码,边来学习这个树控件。
新建一个ASPX页面,输入如下代码:
<html> <body> <h3>一个简单树的展示h3> <form id="form1" runat="server"> <asp:TreeView ID="SampleTreeView" runat="server"> <Nodes> <asp:TreeNode Value="个人电脑" NavigateUrl="PC.aspx" Text="个人电脑" Target="Content" Expanded="True"> <asp:TreeNode Value="硬件" NavigateUrl="hardware.aspx" Text="硬件" Target="Content"> <asp:TreeNode Value="CPU" NavigateUrl="cpu.aspx" Text="CPU" Target="Content" /> <asp:TreeNode Value="内存" NavigateUrl="memory.aspx" Text="内存" Target="Content" /> </asp:TreeNode> <asp:TreeNode Value="软件" NavigateUrl="software.aspx" Text="软件" Target="Content" /> </asp:TreeNode> </Nodes> </asp:TreeView> </form> </body> </html>
执行,我们就可以看到一个我们定义好的树被展示出来了。
TreeView 控件必须在服务器段运行的From中使用(因为需要处理用户点击某个树结点,然后导航到指定的地址,以及一些事件的处理) 。
TreeView 控件中的 Nodes 节点内的XML信息,就是定义我们要展示的树的信息。
asp:TreeNode  则是定义树中每一个树节点。

posted on 2005-06-14 11:16:00 by ghj1976  评论(47) 阅读(15628)

VS2005中用firefox访问 Asp.net Development Server 的站点的方法。

今天在测试vs2005的TreeView控件显示的代码,在非IE浏览器下效果的时候,发现:
当你用firefox访问 Asp.net Development Server 的站点(也就是vs2005自带的那个开发用web站点),会让你输入用户帐号和密码,但是你不论输入那个帐号都是拒绝访问的解决方法。

搜索Google,发现今年4月份的时候,就有人向微软报告了这个bug,对应的也有解答。

解决方法:

解决方法参看下面链接。
Bug Details: asp.net Development Server need identification with Firefox on non IE-browser
http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=582fcb60-47cd-4475-869b-130786c0821d

具体来说就是在Firefox地址栏中输入:about:config
然后在过滤器中输入:NTLM
这时候我们在过滤的结果中,可以看到只有两项。
其中一项是:network.automatic-ntlm-auth.trusted-this
双击这一项,在输入值中输入 localhost
这里输入的为Asp.net Development Server的站点名。
关闭FireFox,重新访问Asp.net Development Server的站点就可以解决这个问题了。

原因:
ASP.Net development web server 对于每个请求,都会执行 NTLM 验证,以确定处理的是来自同一个用户的请求。
在IE中这是自动完成的,Firefox浏览器需要做以上设置才可以。

posted on 2005-06-12 21:31:00 by ghj1976  评论(7) 阅读(4102)

Powered by: Joycode.MVC引擎 0.5.2.0