推荐.NET教程: ASP.NET C# 开发环境 Ajax教程 控件开发 统计报表 数据库 Web服务 安装部署 CommunityServer NHibernate DataGrid/GridView 实用代码 VS2005
示例源码 MVC/三层 SqlHelper 入门源码 开源 CMS Ajax/Atlas C#.net 毕业设计 源码 经典代码 商业 本站作品 持久层 随书源码 WebService 英文/汉化 Asp.net2.0

阿牛·乐园

每天进步一点点

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  80 随笔 :: 14 文章 :: 389 评论 :: 13 引用

2008年12月3日 #

     摘要: 上次写了HqlBuilder,实现了用一个Filter类,来描述要生成的查询.但在列表时,我们不应该把所以的东西都列出来,我们应该只列一页的数据,往往是10条就足够了.所以,在很多页面使用了Filter来查询的情况下,如果对每个函数都加上参数,来传递要第几页的几条数据时,改动会很大.我想到,一般情况下,一个页面只有一个查询.(我的项目中如此,具体问题具体对待).这样我们可以在一个Http交互中,在... 阅读全文
posted @ 2008-12-03 10:14 阿牛 阅读(1171) | 评论 (0)编辑

最近在使用NHibernate时,发现有的列表无法绑定,如提示如下的错误:

[TargetException: 对象与目标类型不匹配。]
   System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target) +7515851
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +105
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +29
   System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) +100

[TargetInvocationException: 对象“Grain.Components.DicDept”上的属性访问器“Name”发生以下异常: “对象与目标类型不匹配。”]
   System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) +390
   System.Web.UI.WebControls.BoundField.GetValue(Control controlContainer) +192
   System.Web.UI.WebControls.BoundField.OnDataBindField(Object sender, EventArgs e) +64

 
前台是如此绑定:

                    <asp:BoundField  DataField="Name" HeaderText="部门名称" />

 

分析了原因,原来是Eval("Name")执行时,应该会把列表的第一个类型反射,以后都用这个类型,而第一个和第二个类型分别是:

类型   
CProxyTypeGrain_ComponentsDicDeptComponents_NHibernate_ProxyINHibernateProxy1 
Grain.Components.DicDept

 
在我的项目中,第二个是我的类,第一个明显是Hibernate的代理类,是DicDept的子类.所以报错是肯定的了.反之,如果第一个节点是DicDept,然后才是代理类,则不会出现错误.

为什么会发生如此的事情呢?我想可能是因为当前登陆用户的部门属于列表中的第一项,所以每次登陆,这个对象都会加载进来,从而在列表时,这个对象会从缓存中直接加载.

看来,我们要在进行查询时,对缓存中的对象进行一下清理,这样就排除了从缓冲中直接取数据,导致类型不一致的问题.

                Database.Session.Clear(); //先清除缓存
                list.AddRange(DicDept.TopDicDeptList());

 好了,现在问题解决了,不过我得考虑一下,是不是每次进行查询前都要进行清理呢?又在哪里进行清理呢?


 

posted @ 2008-12-03 09:19 阿牛 阅读(956) | 评论 (0)编辑

2008年12月2日 #

  由于采用Ajax.Net技术,要求客户不能用浏览器的后退来导航,因为这样会产生不正确的页面.因为有时,结果是Ajax查询返回的,不会保存住.

JQuery是一个好东西,可以很方便的给每个 <A> 加上事件,来重写它的默认的跳转,我们把它改成单击时,调用Location.replace来完成页面切换.

代码如下:

Code

 

  现在好了,可是我在我项目中,发现一点问题,由于登陆页面采用Form认证,这样登陆后会调用

FormsAuthentication.RedirectFromLoginPage(userName, false);

来返回到用户最初请求的页面,但这会造成浏览器切换,会使后退按钮可用.看来我们要登陆成功后,采用注册脚本的形式,来完成这个切换:

Code

 

现在好了,从登陆开始,到退出,浏览器都不会产生后退哟.

posted @ 2008-12-02 15:11 阿牛 阅读(70) | 评论 (0)编辑

2008年11月25日 #

程序代码
posted @ 2008-11-25 08:54 阿牛 阅读(154) | 评论 (0)编辑

2008年11月24日 #

不管在是在service还是action加权限验证,实际是RBAC模块是可以分离的,我在去年的时候完成了这个模块,然后项目的时候只要把这个模块加进去就可以了。如果实际项目是可以通过url来控制权限的,那么就可以不用写一行代码。 在RBAC模块里完全可以做到很细的控制。
资源概念(可以是url,还有刚才看到有人说.do后面的参数那不到,参数当然可以拿的的,只不过url被切分成两部分而已,一部分就是参数.可以通过getQueryString得到)
资源就是想要的到的最终物质,我们可以给每一个资源定义一个权限,也可以给某一类资源定义一个权限,而web项目 url的tree特别容易用来管理资源。资源是一棵树,如果你有管理树根的权限那么就有了这颗树的所有权限。
权限概念
权限是对资源的一种保护访问.用户要访问A资源前提是用户必须有A资源的访问权限.
角色概念
实事上我们不会直接把权限赋予给用户,而是通过角色来赋予给用户,因为用户拥有某一种权限是因为用户扮演着某一种角色。
A是个经理,他管理着B公司,他拥有b,c,d的权限。实际是不是A有这个权限,而是因为Abo是经理。因为经理拥有b,c,d权限
所以很显然在权限划分上,我们会把权限赋予给某一个角色,而不是赋予给个人。这样带来的好处是
如果公司换了经理,那么只要再聘用一个人来做经理就可以了,而不会出现因为权限在个人手里导致权限被带走的情况

分组概念(分组也是一棵树,用户就是这里的叶子)
只有角色是不够的,B公司发现A有财务问题成立了一个财务调查小组,然后我们赋予了这个小组财务调查员的角色(注意是赋予小组这个角色).这样这个小组的所有人员
都有财务调查的资格。而不需要给小组的每个人都赋予这个角色(实际上已经拥有了),分组概念也适合部门,因为任何一个部门在公司里或者社会上都在扮演着一个泛的角色。
用户
用户一定是属于某一个分组的,不存在不属于分组的用户.不过用户可以直接扮演(获得)角色,或者通过属于的分组来得到角色
最后一个概念
判断用户有没有访问资源的权限就看这个用户有没有访问这个资源的权限,也就是说分组,分部门,分角色最终是以权限来实现对资源的访问控制
posted @ 2008-11-24 22:42 阿牛 阅读(32) | 评论 (0)编辑

     摘要: 在使用NHibernate中,经常使用查询,又不愿意去写,就写了这个东东,依对象的属性,通过反射来生成查询。先来看一下使用方式:一个Filter类:[代码]使用查询:[代码]下面是实现代码:[代码] 阅读全文
posted @ 2008-11-24 19:33 阿牛 阅读(476) | 评论 (1)编辑

2008年11月22日 #

     摘要: 要实现一个类似框架结构,有头有尾,中间部分要分菜单、分隔条和内容三部分。写好的效果图如下: 下面是实现代码:(CSS和HTML放一个文件了)[代码] 阅读全文
posted @ 2008-11-22 13:25 阿牛 阅读(108) | 评论 (0)编辑

2008年11月17日 #

有时候,我们不需要用CheckBoxList,这时就不能得到选中的值,其实,我们可以把值存在ViewState中,这样在服务器端可以取出来。

 

Code

 

 

Code

 

 

posted @ 2008-11-17 18:22 阿牛 阅读(102) | 评论 (0)编辑

2008年10月21日 #

     摘要: 简历基本资料: 姓名 牛昆亮 性别 男 出生日期 1978.2.12 居住地 石家庄市 工作年限 5年以上 户口 河北石家庄 电子邮件 evlion@qq.com 电话 15097655658 毕业学校 河北科技大学 专业 化学工程与工艺 毕业年份 2003 英语水平 一般 自我评价:97年通过国家计算机二级C语言考试,2年VC开发经验,4年.NET开发经验,6年MSSqlServer数据库设计经... 阅读全文
posted @ 2008-10-21 22:39 阿牛 阅读(485) | 评论 (4)编辑

2008年5月13日 #

  近几日,我的工作是录入更正的农业直补农户资料,涉及到了各包村干部上报的各种样式的报表,经会计清点后,由我来统一按上报的格式来摘抄到上报表中。据会计说,我的字写得还过得去,比小代强。
  我建议用计算机来处理,打字比写字可快多了,还清楚。
  下面的工作,就是录入一大堆的编号和身份证号以及姓名。姓名不是难事,在录入几十个后,我越发的想去上网,把读霸安装上,我打它来读,这样就不用抬头看屏幕了。想到乡里网吧的半个小时打开一封邮件的速度呀,我还是放弃了。
  身份证可是不能再错误了,幸好我的电子书里有一段关于身份证格式的说明和程序,在稍加修改后,它已经可以用来批量的判断身份证是不是有格式(包括长度,出生年月,验证位)的错误。
  本想通过数据有效性来作,只是公式里不能调用VBA的函数,真是郁闷。
 
  下次有机会,改写一个公式来判断的。
 
 
Sub 检验选定区域身份证()
'
'
 检验身份证 Macro
'
 用于检测身份证号码是否正确
'
'
 快捷键: Ctrl+q
'
Dim arange As range
Dim acell As range
Dim ret As Integer
Set arange = Selection
For Each acell In arange.Cells
  
'MsgBox ActiveCell.Text
    ret = IDCheck(UCase(acell.Text))
    
If ret <> 0 Then
        acell.Select
        
MsgBox "请检查当前选定单元格的身份证是否正确", , "提示"
        
Exit Sub
    
End If
    
    
Next
    
MsgBox "全部正确", , "提示"
End Sub
Function CurrentIdCheck() As Integer
Dim ret As Integer
'MsgBox ActiveCell.Text
'
ret = IDCheck(ActiveCell.Text)
'
MsgBox ret
'
CurrentIdCheck = ret
CurrentIdCheck = 0
End Function
Function IDCheck(ByVal e As StringAs Integer
 
Dim arrVerifyCode
 
Dim Wi
 
Dim Checker
 
Dim BirthDay
 IDCheck 
= 0 '验证通过时返回
 arrVerifyCode = Split("1,0,X,9,8,7,6,5,4,3,2"",")
 Wi 
= Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2"",")
 Checker 
= Split("1,9,8,7,6,5,4,3,2,1,1"",")
 
If Len(e) < 15 Or Len(e) = 16 Or Len(e) = 17 Or Len(e) > 18 Then
 
'IDCheck= "身份证号必须是15位数或18位数!"
 IDCheck = 1
 
Exit Function
 
End If
 
Dim Ai As String
 
If Len(e) = 18 Then
 Ai 
= Mid(e, 117)
 
ElseIf Len(e) = 15 Then
 Ai 
= CStr(e)
 Ai 
= Left(Ai, 6& "19" & Mid(Ai, 79)
 
End If
 
If Not IsNumeric(Ai) Then
 
'IDCheck= "身份证除最后一位外,必须为数字!"
 IDCheck = 2
 
Exit Function
 
End If
 
Dim strYear As Integer
 
Dim strMonth As Integer
 
Dim strDay As Integer
 strYear 
= CInt(Mid(Ai, 74))
 strMonth 
= CInt(Mid(Ai, 112))
 strDay 
= CInt(Mid(Ai, 132))
 BirthDay 
= Trim(strYear) + "-" + Trim(strMonth) + "-" + Trim(strDay)
 
If IsDate(BirthDay) Then
 
If DateDiff("yyyy"Now(), CDate(BirthDay)) < -140 Or CDate(BirthDay) > Now() Then
 
'IDCheck= "身份证输入错误(日期输入错误)!"
 IDCheck = 3