RSS 2.0 Feed

Thursday, March 24, 2005

可以查看此地址

http://www.castleproject.org/castle/show/ActiveRecord

使用此工具可以免去编写NHibernate的配置文件,完全在代码内使用属性配置就可以自动内部映射成NHibernate所需要的数据库映射文件.另外Castle On rails也是一个不错的项目哦,可以通过此处察看:

http://www.castleproject.org/castle/show/castleonrails

只不过需要拥有服务器的控制权限,他的后缀名称是rails,要配置IIS以便支持此文件名,目前可以支持ashx,但普通的虚拟主机依然无法使用,这可能是个比较麻烦的地方.

posted @ | Feedback (14) | Filed Under [ DotNet ]

Wednesday, December 22, 2004

最近一直忙于smartClient,对于自动更新方面,使用了AppUpdater组件,原因是简单易用,taskVision中用的就是它:)可以通过下面的地址获得更加详细的信息:

http://windowsforms.net/articles/appupdater.aspx

哪知刚部署就发现了一个严重的问题,每次update完成之后,应用程序目录下非装载Assembly的目录老是被自动删除(譬如我有一个Setup目录下面有products.mdb文件,此Setup目录老是被自动删除),然后重新启动应用程序后又重新自动安装了,非常讨厌,同时也是百般不解,本来对于VS.NET的Setup Project也不是特别了解,一直以为是配置有问题,试了N次还是找不到解决办法,最后才把目标锁定在AppUpdater组件上面,经过一翻追踪调试,发现问题所在,在Downloader.cs中的Scavenge方法,这个”清道夫”实在太霸道了,将应用程序目录下的非装载Assembly的目录全部都删除了。找到问题所在,简单将那个if语句修改一下,我简单的修改为:

if(Directory.Name.ToLower() == "appupdater") {//HardDirectoryDelete}

也可根据实际要求修改,反正不要让他这么“狂妄”就是了:)

简单的一点东西,花去了1整个上午的时间去调试,希望能对碰到此问题的朋友有帮助,不要再花费这个冤枉时间了。另外,如果更新服务器是windows2003,记得设置WEB_DAV为允许。

posted @ | Feedback (18) | Filed Under [ DotNet ]

Thursday, December 02, 2004

出于项目的需求,写了这样一个控件,使用起来很简单,只需要3句代码:

    exportExcel.FileType = TSCRMLiteWeb.SC.ExportFileType.Excel;
    exportExcel.ExportFileName = "currencyList";
    exportExcel.TargetControlID = "currencyContianer.gridCurrencyList";

需要说明的只有几点:

1.由于项目中所有需要导出内容的控件都是DataGrid,因此只针对对此控件的测试,满足需求先,其它就没有测试过了:)

2.属性ExportFileName不要扩展名,FileType属性指定以后,控件自身就会得到对应的扩展名了

3.最关键的地方就是TargetControlID,这是需要导出内容的服务器控件的“路径“,通常是DataGrid的ID值,如果你的DataGrid就直接在Page下面,那么TargetControlID的值就直接设为DataGrid的ID,如果DataGrid父亲控件不是Page,那么一直追朔到Page下的一级控件,比如上面的例子,currencyContainer就是一个Page下面的控件,gridCurrencyList的父亲控件是currencyContainer,他们之间用点号分开,看过代码后你就会知道是为什么了,就这些。这里是所有的代码:

ps:更新了一下代码,另外如果DataGrid中包含类似LinkButton这样的控件,绑定值的时候应该使用

<asp:LinkButton Text='"<%#DataBinder.Eval(Container,&#8220;columnName&#8220;)%>"'></asp:LinkButton>,而不要使用<asp:LinkButton><%#DataBinder.Eval(Container,&#8220;columnName&#8220;)%></asp:LinkButton>这样的形式,因为这样Text将不会被倒入Excel中

posted @ | Feedback (36) | Filed Under [ DotNet ]

Tuesday, August 03, 2004

IEWebControl相信大多数的Asp.Net开发人员都知道,即便没有用过也听说过,主要包含TreeViewTabStripToolBarMultiPage四个比较常用的控件,其中TreeView最常用,但是默认的IEWebControl却只能将资源文件(包括HTCimages文件)放到WEB站点的根目录下才能运行,这样对于很多无法更改服务器设置的用户来说是相关不便的,不过我们只要稍微手动修改一下MS提供的源代码,就能很快让整个控件都在应用程序目录下运行。

主要修改代码在BaseRichControl.cs文件中,通过跟踪可以发现寻找资源文件是通过FindCommonPath方法来执行的,其实可以发现此方法中已经预留了通过配置节设置资源文件的途径,下面是修改的步骤:

 1.FindCommonPath()中的return CleanupPath(path);修改为return  context.Request.ApplicationPath + CleanupPath(path);

 2.修改常量ConfigName的值为appSettings

 3.Web.Config中新增一个appSettings的配置节,key必须是常量CommonFilesKey定义的值,当然你也可以自己修改,至于value,看需要要放入虚拟目录的哪个路径下面

 4.IEWebControl解压缩出来的.htc.gif文件放入web.config中指定的文件夹下面即可

这样,即便目标服务器没有安装IEWebControl,我们也可以让所有的控件都运行起来了.当然Asp.Net2.0已经将TreeView加为标准控件了,到时候不必这么麻烦了J

P.S:HttpContext.GetConfig(string name);读取的到底是什么地方的配置节呢?理解上应该是读取自定义的配置节,如果是自定义的配置节,应该是ConfigurationSettings.GetConfig()吧?不太明白,谁能具体解释一下呢?

posted @ | Feedback (43) | Filed Under [ DotNet ]

Monday, August 02, 2004

AspNetForum V2现在已经被更名为Community Server :: Forums 2.0,由rhoward创建的公司telligentsystems来管理,最新版本已经发布了,可以从下面的URL地址找到:

http://forums.asp.net/Forums/ShowPost.aspx?PostID=457530#457530

突然发现.Text的作者也加盟了telligentsystems,rhoward似乎很喜欢和优秀Open Source的开发人员合作,除了Forums 2.0,现在telligentsystems的团队中还有nGallery.Text、FreeTextBox的作者、DotNetNuke的成员,全部都是流行的开源.NET项目.

posted @ | Feedback (17) | Filed Under [ 闲谈 ]

Friday, June 11, 2004

ViewState在VB.NET中key区分大小写?可以观察下面的情况:
ViewState("Customer_id") = 1 ViewState("Customer_Id") = 2 Response.Write(ViewState("Customer_ID")) Response.Write(ViewState("Customer_id") <> ViewState("Customer_Id"))
Session("CustomerId") = 1 Session("customerid") = 2 Response.Write(Session("CustomeriD"))
结果很明显,ViewState那个比较输出true,而Session的输出值则是预期的2,cookie也是预期的覆盖.通过Reflector察看一下ViewState的set操作通过调用Add来执行悲伤的脸StateBag.Add)
Public Sub set_Item(ByVal key As String, ByVal value As Object) Me.Add(key, value) End Sub
不同的,Session或者Cookie的set操作都是通过类似dict(key) = value来实现set操作的,(HttpSessionState内部维护一个SessionDictionary,HttpCookie则是NameValueCollection).
通过Framework的文档可以看到IDictionary的Add方法,备注说明Add方法将不会修改现有元素,而StateBag内部正是维护一个IDictionary的bag字段,并且本身也实现了IDictionary,这样看来似乎都合乎情理了,但是继续察看StateBag.Add(String,Object)的实现,我却又模糊了,这是Reflector反编译出来的代码:
Public Function Add(ByVal key As String, ByVal value As Object) As StateItem If ((key Is Nothing) OrElse (key.Length Is 0)) Then Throw New ArgumentException(HttpRuntime.FormatResourceString("Key_Cannot_Be_Null")) End If Dim item1 As StateItem = TryCast(Me.bag(key),StateItem) If (item1 Is Nothing) Then If ((value Is Nothing) AndAlso Not Me.marked) Then Else item1 = New StateItem(value) Me.bag.Add(key, item1) End If Else If ((value Is Nothing) AndAlso Not Me.marked) Then Me.bag.Remove(key) Else item1.Value = value End If End If If ((item1 IsNot Nothing) AndAlso Me.marked) Then item1.IsDirty = True End If Return item1 End Function
从这段代码来看,难道是从IDictionary中通过key来读取value的操作区分大小写?不然item1不是Nothing就不可能调用bag.Add的方法,而是替换值,so,问题出在哪里呢?

posted @ | Feedback (15) | Filed Under [ DotNet ]

Tuesday, June 08, 2004

Asp.net Forum V2 RC2版本已经release了,现在在http://forums.asp.net/forums可以看到整个UI有了很大的改变,至少看起来变漂亮许多了,原来Latest Source bug一堆,RC1版本也有很多问题,现在的这个版本已经有了比较大的改观了.
发现一个很大的变化就是顶头多了一个telligentsystems的logo,还有一些小字:


The ASP.NET Forums Toolkit is an Open Source discussion system
for Microsoft® .NET®, managed by »telligentsystems.


检索了一下才知道这是Rob Howard的新公司,这位Asp.net的Program Manager,Asp.net Forum v1的主要开发者之一已经离开了MS了,万分惊讶...
尽管这样看来Asp.net Forum仍然有Rob Howard参与,不过不知道他在MS的接任者是谁,能否同样出色,或者更加出色...

posted @ | Feedback (13) | Filed Under [ 闲谈 ]

Friday, May 28, 2004

传统的模式窗口中是使用向隐藏框架页提交,来避免submit以后弹出一个新窗口,(比如ASP时代),不过由于现在的Asp.net多数情况下都是自身PostBack,因此原来的方法变得不太行得通,为了PostBack不产生新窗口,可以使用如下办法:

<iframe src="targetDialog.aspx" width="100%" height="100%">

这样在targetDialog.aspx中产生的任何PostBack都不会弹出新窗口.

另外传回值的情况,一般为了方便argument应该传递window对象,所以如果要在targetDialog.aspx中传值回parent主窗口的话,上述情况只是多了一层,通过parent.window.dialogArguments.document.getElementById("xxx"),就可以访问/设置主窗口中的这些控件状态值.

另一个更加简单的方法,在头中新增一行:
<BASE target=_self>即可

posted @ | Feedback (24) | Filed Under [ Dhtml ]

Thursday, May 13, 2004

树形结构是应用中常用的数据结构,最简单的设计类似:

id,name,parent_id

这种最简单的设计通常需要结合递归来最终形成树形UI,而且,对于要取得某一个节点的所有下级节点也不是很方便,
出于这种考虑,使用如下UDF来简化这种操作:
--取得树形结构中当前节点的所有下级节点 CREATE FUNCTION [dbo].[GetChildCategories] (@parent_id int) RETURNS @work Table (num int IDENTITY(1,1),category_id int) AS BEGIN declare @childrenCount int,@currCategory_id int,@num int set @num = 1 insert @work select category_id from Category_Classification where parent_id = @parent_id set @childrenCount = @@ROWCOUNT while (@num <= @childrenCount) Begin select top 1 @currCategory_id = category_id From @work Where num = @num insert @work select category_id From Category_Classification where parent_id = @currCategory_id set @childrenCount = @childrenCount + @@ROWCOUNT set @num = @num + 1 End Return END

主要是将一个递归操作转化为一个单一的循环操作,就这几句代码也不知道该怎么写注释了,笑脸
未有大数据量测试.

posted @ | Feedback (17) | Filed Under [ SqlServer ]

Saturday, May 08, 2004

一个加亮代码片断的工具,这个在线页面应该可以为你在页面上paste美观的code snippet节省一些时间,支持不少的脚本和开发语言,比如常用Vbscript,VB.NET,C#,sql等等,check it here:

CodeHighlighter

记得最好不用选中那个多余Enable outlining的checkbox,这样会多出类似VS.NET中的折叠效果,但是需要特定的图片,生成的html代码多了很多的img标签.
最后,需要把生成的html代码放入一个pre标签中,一段美观的code snippet就生成了.

posted @ | Feedback (14) | Filed Under [ 闲谈 ]